【问题标题】:Is it good practice to use this NSManagedObjectContext throughout the all app在整个应用程序中使用此 NSManagedObjectContext 是一种好习惯吗
【发布时间】:2012-04-03 17:12:14
【问题描述】:

我的应用程序使用 Core Data,我在 Xcode 中创建项目时使用了 CoreData 模板,所以我的 AppDelegate 文件中已经有 NSManagedObjectContext 对象,但是在所有应用程序中使用此上下文是否是一种好习惯(移动它从一个 viewController 到另一个)?
还是出于不同的原因分配更多更好?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    我不喜欢单例的想法,因为 Core Data 的东西已经很难在没有违反告诉不问规则的类的情况下隔离测试。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        是的,你最好只这样做。每当您在任何课程中需要它时,从AppDelegate 文件中复制NSManagedObjectContext。使用此行来复制它。我在我的项目中使用它并且效果很好:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-16
          • 2014-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多