在整个应用程序中使用此NSManagedObjectContext是一种好习惯

时间:2012-04-03 17:12:14

标签: iphone objective-c database core-data nsmanagedobjectcontext

我的应用程序使用Core Data,我在Xcode中创建项目时使用了CoreData模板,所以我的AppDelegate文件中已经有了NSManagedObjectContext对象,但是在整个应用程序中使用这个上下文是不错的做法(将它从一个viewController移动到另一个viewController? 或者为了不同的原因分配更多可能更好?

4 个答案:

答案 0 :(得分:2)

这样做很好。您需要注意的是,如果您想要使用多线程管理多个数据库托管,则必须在对象上下文中使用锁定,并创建多个对象上下文以实现更高的安全性,从而确保不会有多个上下文同时写在同一个数据库上,同时避免多次调用同一个上下文,这会导致数据库死锁。

答案 1 :(得分:2)

对于我已经完成的大多数应用程序,如果我要在后台线程中工作,我通常只创建一个新的managedObjectContext。

我倾向于通过赋予ivar将managedObjectContext从呈现的viewController传递给呈现的viewController,或者如果没有一些CoreData魔法,控制器根本无法工作,我将它放在指定的init方法中。

如果我在表中选择一行并呈现一个新的viewController,我将只传递所选的managedObject,然后如果我需要managedObjectContext,我可以使用[managedObject managedObjectContext];

我不喜欢单身人士的想法,因为核心数据的东西已经足够难以隔离测试而不会破坏告诉不要求规则。

答案 2 :(得分:1)

这样做是绝对可以的(至少如果你留在GUI-Thread中)。但是你问的是好的做法。这就是Xcode的核心数据模板可以改进的地方。阅读此Blogentry以了解Apple应该如何做得更好。

答案 3 :(得分:0)

是的,只有这样才能与你相处。在任何类中需要时,从NSManagedObjectContext文件复制AppDelegate ..使用此行复制它。我在我的项目中使用它并且很酷:

 if (self.managedObjectContext == nil) 
{ 
    self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@", self.managedObjectContext);
}