Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 有没有一种方法可以在不必每次调用我的AppDelegate的情况下获取NSManagedObjectContext?_Iphone_Objective C_Xcode_Uikit_Sdk - Fatal编程技术网

Iphone 有没有一种方法可以在不必每次调用我的AppDelegate的情况下获取NSManagedObjectContext?

Iphone 有没有一种方法可以在不必每次调用我的AppDelegate的情况下获取NSManagedObjectContext?,iphone,objective-c,xcode,uikit,sdk,Iphone,Objective C,Xcode,Uikit,Sdk,我从Xcode模板创建了一个应用程序,并选择“核心数据”作为选项,因此所有核心数据委托和主要方法都将包含在AppDelegate文件中 现在,每次为了使用核心数据而必须获取上下文时,我都使用以下代码: MovieCatalogAppDelegate *appDelegate = (MovieCatalogAppDelegate *)[[UIApplication sharedApplication] delegate]; NSManagedObjectContext *context = [ap

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

现在,每次为了使用核心数据而必须获取上下文时,我都使用以下代码:

MovieCatalogAppDelegate *appDelegate = (MovieCatalogAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
是否仍然可以在不直接调用MovieCatalogAppDelegate的情况下获取managedObjectContext?我想将其作为一个通用调用,这样我的数据文件就不必绑定到MovieCatalogAppDelegate.h。基本上,我正在尝试解耦代码,使事情更加动态,而不需要知道直接名称

谢谢。

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

您可以将其设置为UIViewController(或任何其他对象)的属性,并在创建时进行设置;因此,在您的代码中,您只需调用:

self.managedObjectContext

而不是一路走向代表


如果您需要更多信息,请发表评论,我将更新答案。

有几个不同的选项

  • 您可以将核心数据支持代码移动到应用程序代理以外的类中。如果你愿意的话,就做一个单身汉

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

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


  • 关于CIMGF有一些想法。

    既然苹果公司建议不要对选项卡栏控制器和导航控制器进行分类,你会如何处理它们。你会用同样的方法解决这个问题,因为导航控制器和选项卡栏控制器实际上不需要数据引用。您可以将其设置为导航控制器和/或选项卡栏控制器内视图控制器的属性,这是您的子类。