核心数据上下文和单例数据控制器

时间:2013-05-16 17:42:48

标签: ios core-data singleton nsmanagedobjectcontext

我有一个单例数据控制器来保存一个对象数组。例如,参见我的解决方案的香蕉问题:singelton dataController banansArray

现在我想将香蕉阵列保存到持久状态。这个核心数据教程:core data - store images让我对核心数据有了一个很好的了解,并且在将数据控制器更改为单例之前,我能够将它包含在我的应用程序中。

现在什么是最好的?

我是否需要将应用程序委托中生成的Core Data堆栈移动到管理bananas数组的singletonDataController?或者,我是否必须像使用Core Data模板生成的Master-View控制器一样在应用程序委托中设置单例的上下文?

在这种情况下,如何在appDelegate中设置上下文? 这在AppDelegate应用程序didFinishLaunchingWithOptions:

中不起作用(适用于模板中的masterView)
DataControllerSingleton *dataController;
dataController.managedObjectContext = self.managedObjectContext;

在beerDataModel示例中,ManagedObjectCode为:

if (_mainContext == nil) {
    _mainContext = [[NSManagedObjectContext alloc] init];
    _mainContext.persistentStoreCoordinator = [self persistentStoreCoordinator];
}

1 个答案:

答案 0 :(得分:2)

根据您的问题,我认为这是个人选择。例如,在我的项目中,我更喜欢维护一个单例类来管理Core Data堆栈并在整个应用程序中使用它。我更喜欢让app delegate干净。

无论如何,现在如果你使用Core Data,那么管理对象数组的旧单例就不再有用了。使用Core Data,您可以获得可以从持久性存储中获取的对象图(例如)。显然,您需要正确设计模型(实体,关系等)。例如,在您的情况下,具有正确属性的Banana实体是正确的选择。

要查看单例类,请查看@BenSheirman的BeerDataModel.h/.m。这是一个非常好的方法。它可以像下面这样使用。

NSManagedObjectContext *mainContext = [[BeersDataModel sharedDataModel] mainContext];

P.S。更改BeersDataModel中的BananasDataModel或您喜欢的名称。