gpt4 book ai didi

core-data - NSPersistentDocument + StoryBoards : not mixed properly for me

转载 作者:行者123 更新时间:2023-12-02 10:47:33 25 4
gpt4 key购买 nike

我一直在尝试了解 OS X 的 StoryBoards——具体来说,我正在尝试使用 Core Data 编写一个基于文档的应用程序。

我不知道如何让 StoryBoard 中的各个 View Controller 访问 NSPersistentDocument 的 ManagedObjectController。

在 StoryBoards 之前,如果您使用 Core Data 制作基于文档的应用程序,您将获得一个 XIB 文件,其中包含一个所有者为文档的窗口。 Document 有一个窗口 Controller 数组,但该 XIB 的所有者是 Document。您可以添加一个 NSArrayController,将其托管对象上下文绑定(bind)到所有者的托管对象上下文,一切都很好。

如果您使用 StoryBoards 制作项目,则顶层窗口由 NSWindowController 拥有。 NSPersistentDocument 在哪里?它被创建了,但我不知道在哪里或为什么。

此外,在您使用模板获得的初始 Storyboard中,该窗口没有传入箭头,也就是说它是入口点。如果删除窗口 Controller 并添加一个新窗口 Controller ,它会有一个箭头。现在,您将有两个窗口 Controller - 一个由 Storyboard制作,另一个由文档制作,文档在其 makeWindowControllers 方法中创建它

- (void)makeWindowControllers {
// Override to return the Storyboard file name of the document.
[self addWindowController:[[NSStoryboard storyboardWithName:@"Main" bundle:nil] instantiateControllerWithIdentifier:@"Document Window Controller"]];
}

这是一个错误吗?显然有些东西我不明白。

最佳答案

我一直在调查同样的事情,到目前为止发现了一些事情。有些人建议在不执行基于文档的应用程序时让 Controller 通过层次结构向上查找以获取应用程序委托(delegate),但 Apple 建议将信息推送到 Controller 。对于 NSPersistentDocument 应用程序,我尝试使用文档类中的 makeWindowControllers() 方法中的以下代码来实现此目的。

(windowController.window?.contentViewController as! MyViewController).moc = managedObjectContext

这假设 View Controller (MyViewController 类)中有一个名为 moc 的适当属性,它是层次结构中的第一个属性。您还可以使用表示的对象来存储此属性。如果您愿意,您可以为您的属性实现 didSet 方法,将其传递给其他 Controller 。

不幸的是,我仍在研究这种方法的细节,因为上面的方法是在 Controller 的 viewDidLoad() 之后调用的,并且 moc 不会被设置,这似乎也意味着数组 Controller 的 准备内容触发得太早。

通常情况下,我不会对您的问题提交如此不完整的答案,但由于缺乏权威的解决方案,所以我这样做了。

关于core-data - NSPersistentDocument + StoryBoards : not mixed properly for me,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211608/

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