【发布时间】:2018-12-17 13:33:08
【问题描述】:
我正在尝试创建一个与我的领域数组相关的列表。我不知道是否可以采用硬编码领域数组并为每个字符串提供自己的列表。目前我在表视图中拥有我的数组,并且当将行选择一行以自己的ViewController时。我试图让每个选定的行包含自己的列表。这是代码
数据模型 1
import Foundation
import RealmSwift
class DateChange: Object {
@objc dynamic var itemId : String = UUID().uuidString
override static func primaryKey() -> String? {
return "itemId"
}
let dates = List<String>()
let selection = List<Home>()
convenience init(tag: String) {
self.init()
}
}
数据模型 2
class Home: Object {
@objc dynamic var itemId : String = UUID().uuidString
override static func primaryKey() -> String? {
return "itemId"
}
var parentCategory = LinkingObjects(fromType: Home.self, property: "selection")
视图控制器 1
class WeekOfViewController: NSViewController {
let post = DateChange(tag: "")
post.dates.append("December 30th - January 5th")
post.dates.append("January 13th - January 19th")
}
func numberOfRows(in tableView: NSTableView) -> Int {
return 2
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cell = tableView.makeView(withIdentifier:
NSUserInterfaceItemIdentifier(rawValue: "dateCell") , owner: self) as! NSTableCellView?
cell?.textField?.stringValue = post.dates[row]
return cell
}
func tableViewSelectionDidChange(_ notification: Notification) {
self.performSegue(withIdentifier: "selectedDate", sender: self)
}
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
// Unwrap the segue's identifier.
guard let identifier = segue.identifier else { return }
// Make sure this is the segue we care about.
if identifier == "selectedDate" {
let secondVC = segue.destinationController as! ViewController2
// Figure out which row was selected.
if let selectedRow = dateTableView?.selectedRow {
secondVC.selectedDate = post.dates[selectedRow]
}
视图控制器 2
class ViewController2: NSViewController {
@IBAction func saveData(_ sender: NSButton) {
if let appendDate = selectedDate {
do {
try realm?.write {
let homeData = Home()
homeData.done = false
appendDate.dates.append()
}
} catch {
print("There was an error saving")
}
}
}
【问题讨论】:
-
你初始化'Home'对象,你可以返回“itemId”。但是为 Home 对象设置的字符串“itemId”在哪里?
-
这是一个错字对不起。它在我的项目中。
-
我不明白如何使用领域从硬编码数组中创建一个列表。我制作了我的领域数组,并附加了每个项目。当我选择一个项目时,它会将我转到一个新的视图控制器以创建数据并将其保存到它的子元素。我似乎无法完成这项工作。请帮忙
-
那是相当多的代码,但我认为核心问题是初始数据源结构。你有一个静态 post 对象,tableView 的数据源,也许这就是问题所在。通常你会有一个对象数组作为主表视图的数据源。当您点击一行时,您会在该索引处获取对象,然后将其子属性显示在第二个视图控制器中。这可能是关于对象的详细信息,甚至是另一个列表。你所拥有的可能有点工作,但最好让你的主数据源成为一个包含子数据的对象数组。
-
嘿,谢谢 Jay,我将如何制作一组对象?