我从Xcode模板创建了一个应用程序并选择了“Core Data”作为选项,因此所有Core Data委托和主要方法都将包含在AppDelegate文件中。
现在,每次我必须获取上下文才能使用Core Data,我使用以下代码:
MovieCatalogAppDelegate *appDelegate = (MovieCatalogAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
无论如何都需要获取managedObjectContext而无需直接调用MovieCatalogAppDelegate?我想让它成为一个通用调用,所以我的数据文件不一定绑定到MovieCatalogAppDelegate.h。基本上,我试图解耦代码并使事情更加动态,而不需要知道直接名称。
感谢。
答案 0 :(得分:5)
有几种不同的选择。
您可以将核心数据支持代码移动到应用程序委托以外的类中。如果你愿意的话,把它变成单身。
您可以将托管对象上下文作为每个视图控制器的属性传递。
如果您已经传递了NSManagedObject
,则可以从所述对象的NSManagedObjectContext
获取managedObjectContext
。
this article对CIMGF有一些想法。
答案 1 :(得分:4)
官方答案(Apple文档)是你应该在每个将使用它的类上都有一个指向managedObjectContext的指针,并将它传递给需要使用它的任何其他对象。
您可以将其设置为UIViewControllers(或任何其他对象)的属性,并在创建时设置它;所以在你的代码中你只需要打电话:
self.managedObjectContext
而不是一直到代表。
如果您需要更多信息评论,我会更新答案。