有没有办法获得NSManagedObjectContext而不必每次都调用我的AppDelegate?

时间:2011-02-05 23:53:31

标签: iphone objective-c xcode uikit sdk

我从Xcode模板创建了一个应用程序并选择了“Core Data”作为选项,因此所有Core Data委托和主要方法都将包含在AppDelegate文件中。

现在,每次我必须获取上下文才能使用Core Data,我使用以下代码:

MovieCatalogAppDelegate *appDelegate = (MovieCatalogAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];

无论如何都需要获取managedObjectContext而无需直接调用MovieCatalogAppDelegate?我想让它成为一个通用调用,所以我的数据文件不一定绑定到MovieCatalogAppDelegate.h。基本上,我试图解耦代码并使事情更加动态,而不需要知道直接名称。

感谢。

2 个答案:

答案 0 :(得分:5)

有几种不同的选择。

  1. 您可以将核心数据支持代码移动到应用程序委托以外的类中。如果你愿意的话,把它变成单身。

  2. 您可以将托管对象上下文作为每个视图控制器的属性传递。

  3. 如果您已经传递了NSManagedObject,则可以从所述对象的NSManagedObjectContext获取managedObjectContext

  4. this article对CIMGF有一些想法。

答案 1 :(得分:4)

官方答案(Apple文档)是你应该在每个将使用它的类上都有一个指向managedObjectContext的指针,并将它传递给需要使用它的任何其他对象。

您可以将其设置为UIViewControllers(或任何其他对象)的属性,并在创建时设置它;所以在你的代码中你只需要打电话:

self.managedObjectContext

而不是一直到代表。

如果您需要更多信息评论,我会更新答案。