回到 xib 和 nib 时代,我已经有一段时间没有处理 CoreData 和 macOS 了。使用 xib,有“文件所有者”可以让您访问您的文档和 managedObjectContext。简单的。
使用 NSPersistentDocument 和我的故事板,我遇到了一些先有鸡还是先有蛋的问题。在从 NSPersistentDocument 子类化的 Document 类中,我有以下内容:
override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController // <- when I need the moc
self.addWindowController(windowController)
windowController.contentViewController!.representedObject = self // <- when I set the representedObject
}
这似乎是包括苹果在内的许多人所建议的。
我的问题是:在 MainViewController 中,我想要一个对象控制器,它需要绑定到 managedObjectContext,但是当它需要 managedObjectContext 时,我还没有将代表对象设置为 self。所以抛出异常。在 makeWindowControllers 方法的末尾设置代表对象为时已晚,但我看不到更早的时间。