gpt4 book ai didi

swift - NSPersistentDocument、Swift、macOS 和 Storyboard — 如何获取 ManagedObjectContext?

转载 作者:行者123 更新时间:2023-11-30 10:01:16 25 4
gpt4 key购买 nike

自从我处理 CoreData 和 macOS 以来已经有一段时间了,回到 xib 和 nibs 的时代。对于 xib,“文件所有者”可以让您访问文档和 ManagedObjectContext。简单。

对于 NSPersistentDocument 和我的 Storyboard,我遇到了一些先有鸡还是先有蛋的问题。在我的 Document 类(NSPersistentDocument 的子类)中,我有以下内容:

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中,我想要一个对象 Controller ,并且它需要绑定(bind)到托管对象上下文,但是当它需要托管对象上下文时,我还没有将representedObject设置为self。所以会抛出异常。在 makeWindowControllers 方法的末尾设置representedObject 已经太晚了,但我不认为可以更早地获取它。

最佳答案

好的。所以。我不知道昨晚发生了什么,但我无法让这个工作正常进行。

今天早上,我重新阅读了representedObject 的文档:

The representedObject property is key-value coding and key-value observing compliant. When you use the represented object as the file's owner of a nib file, you can bind controls to the file's owner using key paths that start with the string representedObject.

文档清楚地告诉我神奇之处在于representedObject。因此,我确保我的 makeWindowControllers 方法如上所述,并且我确保 Storyboard中的对象 Controller 符合文档所述。

Don’t mind the (!)

路径有一点(!)我并不感到惊讶,因为representedObject只是一个AnyObject。

然后我尽职尽责地启动了该应用程序,完全预计它不会工作。

但是它成功了。不知道为什么昨天没有,但我对已经浪费的时间无能为力。

跟进:作为一项实验,我尝试了昨天的一种尝试。为了摆脱 (!) 并方便地引用 moc,我将此方法添加到 MainViewController 中:

var moc:NSManagedObjectContext? {
if let doc = self.representedObject as? Document {
return doc.managedObjectContext
}
return nil
}

然后我使用“self.moc”作为对象 Controller 的模型关键路径。这不起作用,并且抛出了熟悉的异常。将模型 key 路径恢复为“self.representedObject.managementObjectContext”,一切正常。 ...就像魔法一样。

关于swift - NSPersistentDocument、Swift、macOS 和 Storyboard — 如何获取 ManagedObjectContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407459/

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