【问题标题】:Is there a way to get NSManagedObjectContext without having to calling my AppDelegate every time?有没有办法获得 NSManagedObjectContext 而不必每次都调用我的 AppDelegate?
【发布时间】:2011-02-05 23:53:31
【问题描述】:

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

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

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

是否有无需直接调用 MovieCatalogAppDelegate 即可获得 managedObjectContext?我想让它成为一个通用调用,这样我的数据文件就不必绑定到 MovieCatalogAppDelegate.h。基本上,我试图解耦代码并使事情变得更加动态,而无需知道直接名称。

谢谢。

【问题讨论】:

    标签: iphone objective-c xcode uikit sdk


    【解决方案1】:

    有几个不同的选项。

    1. 您可以将 Core Data 支持代码移动到应用委托以外的类中。如果您愿意,可以将其设为单例。

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

    3. 如果你有一个已经在传递的NSManagedObject,你可以从该对象的managedObjectContext 中获取NSManagedObjectContext

    CIMGF 上的this article 有一些想法。

    【讨论】:

      【解决方案2】:

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

      您可以将其设置为 UIViewControllers(或任何其他对象)的属性并在创建时设置;所以在你的代码上你只需要调用:

      self.managedObjectContext

      而不是一路去委托。

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

      【讨论】:

      • 你将如何使用标签栏控制器和导航控制器来做到这一点,因为苹果建议不要对它们进行子类化。
      • 你可以用同样的方法解决它,因为导航控制器和 tabBar 控制器实际上不需要对数据的引用。您可以将其设置为导航控制器和/或标签栏控制器内部的视图控制器的属性,这是您的子类。
      猜你喜欢
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多