gpt4 book ai didi

objective-c - 如何在 NSPersistentDocument 和 View Controller 之间共享 NSManagedObjectContext?

转载 作者:行者123 更新时间:2023-12-03 17:39:26 25 4
gpt4 key购买 nike

OS X 编程新手。从带有 Core Data 的基于文档的应用程序的 Xcode 模板开始。

在我的默认 Document.xib 中,我创建了一个 View,我使用自定义 ViewController 控制它。然后,我在 Document.xib 中创建了一个托管对象上下文,并创建了两个导出,一个到 Document.h:

@property (strong) IBOutlet NSManagedObjectContext *myManagedObjectContext;

还有一个到ViewController.h:

@property (weak) IBOutlet NSManagedObjectContext *myManagedObjectContext;

Document.mwindowControllerDidLoad 中,我添加了 self.myManagedObjectContext = [self ManagedObjectContext]

按照 Ghostfly 的建议 ( could not locate an NSManagedObjectModel for entity name ),我添加了:

NSLog(@"Context: %@",self.myManagedObjectContext);
NSLog(@"PS Coord : %@",self.myManagedObjectContext.persistentStoreCoordinator);
NSLog(@"MOM : %@", self.myManagedObjectContext.persistentStoreCoordinator.managedObjectModel);
NSLog(@"Entities : %@",[[self.myManagedObjectContext.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]);

windowControllerDidLoad 中的 Document.m 以及 ViewController 的 awakeFromNib 中。在 Document.m 中,一切似乎都工作正常:所有 NSLog 语句看起来都正确,我还可以将实体添加到我的 NSManagedObjectContext 中,但在 ViewController 中,只有第一个 NSLog 语句有效,其余的返回(null)。

我的问题:这里出了什么问题,我是否以正确的方式处理这个问题?

各种其他问题似乎建议将 AppDelegate 添加到 MainMenu.xib 中,但我不确定这在基于文档的应用程序中的实践中如何工作(例如,我期望每个文档都有一个单独的 NSManagedObjectContext,但如果我使用 AppDelegate,那么它们肯定都是相同的?),或者即使推荐这样做,因为一些教程表明这是明确的 如何做到这一点(例如此处 http://franck.verrot.fr/blog/2012/01/18/best-way-to-pass-nsmanagedobjectcontext-around-in-ios-applications/ )。非常感谢帮助!谢谢。

最佳答案

当您开始使用多个文档时,上述答案会产生问题 - 它不会工作,因为您只会保存到最后打开的文档。您不应该尝试创建自己的托管对象上下文,因为这样您就必须设置存储数据等的所有内容(这已经完成)。更简单:

您的主文档类应该是 NSPersistentDocument 的子类。如果没有,那么您实际上可以用它代替 NSDocument。 NSPersistentDocument 有它自己的 ManagedObjectContext 和 persistenceStoreCoordinator,您可以在文档中使用它们(以存储文档相关数据)。

因此,这意味着每个文档都有自己的 ManagedObjectContext 和 persistenceStoreCoordinator。要在其他类中访问这些内容,您应该传递对文档的引用。例如。在 View Controller 子类上,为文档创建一个 @IBOutlet,将文档附加到界面生成器中,然后在构造函数中,将文档的托管对象上下文复制到 View Controller 中它自己的指针以供使用。

关于objective-c - 如何在 NSPersistentDocument 和 View Controller 之间共享 NSManagedObjectContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22496345/

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