gpt4 book ai didi

ios - 如何将一个 View Controller 与不同的 Realm 类一起使用

转载 作者:行者123 更新时间:2023-11-29 05:59:18 24 4
gpt4 key购买 nike

我正在尝试创建一个应用程序,其中有 4 个按钮,每个按钮对应一个不同的类别。现在,类别是保存在 swift 文件中的不同 Realm 对象。

class HealthData: Object {
@objc dynamic var name : String = ""
}

class SelfImprovement: Object {
@objc dynamic var name : String = ""
}

class TopSecret: Object {
@objc dynamic var name : String = ""
}

class Ohter: Object {
@objc dynamic var name : String = ""
}

现在我的问题是我想要一个带有 TableView 的单个 View Controller 具有不同的数据,这些数据将从相应的类别传递到 TableView。

我的想法是我可以创建 var categories : Results<HealthData>!并使用 if 语句将类别更改为结果等,使用准备转场来了解按下了哪个按钮。

override func viewWillAppear(_ animated: Bool) {
if categoryNo == 1 {
title = "Health"
} else if categoryNo == 2 {
title = "Self Improvement"
categories = Results<SelfImprovement>!
}
}

但是,当然,XCode 无法将“Results?.Type”类型的值分配给“Results?”类型。

有什么想法吗?

感谢大家抽出时间!

最佳答案

所以问题是你想重用tableView来显示来自不同tableView数据源的数据。您正在走正确的道路,但答案是告诉 tableView 从哪里获取数据。

我将其与真正基本的代码配对,因此不要复制粘贴 - 尽量保持简短。

假设我们有一个带有 tableView 的 View Controller

class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {

@IBOutlet weak var myTableView: NSTableView!

var myHealthArray = [String]() //one tableview datasource
var mySelfImprovementArray = [String]() //another tableview datasource
var tableType = "" //will tell the tableView what it should be displaying

然后,再往下,我们有填充 tableview 的 tableView 委托(delegate)方法

func numberOfRows(in tableView: NSTableView) -> Int {
if self.tableType == "health" {
return self.myHealthArray.count
} else if self.tableType == "self_improvement" {
return self.mySelfImprovementArray.count
} //etc
}

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cell = tableView.makeView(withIdentifier: myIdentifier, owner: self) as! NSTableCellView
var s = ""
if self.tableType == "health" {
s = self.myHealthArray[row]
} else if self.tableType == "self_improvement" {
s = self.mySelfImprovementArray[row]
} //etc
cell.textField?.stringValue = s
return cell
}

所以这里的想法是将 tableType 设置为 tableView 中应该显示的内容,然后 tableView 委托(delegate)方法中的逻辑将知道从哪个 dataSource 数组获取数据。

请务必记住, Realm 结果是同质的,因此它们只能存储一种类型的对象。

在此示例中,我将数据源定义为字符串,但在您的情况下,它们可能是 Realm 结果对象。如果它们是字符串,您可以重复使用该数组,因为它只包含字符串对象。但是,如果数据源是 Realm 结果,您将需要单独的数组,如本答案所示。

关于ios - 如何将一个 View Controller 与不同的 Realm 类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54846438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com