0

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

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

现在什么是最好的?

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

在那种情况下,我如何在 appDelegate 中设置上下文?这在 AppDelegate 应用程序中不起作用(它适用于模板中的 masterView)didFinishLaunchingWithOptions:

DataControllerSingleton *dataController;
dataController.managedObjectContext = self.managedObjectContext;

在 beerDataModel 示例中提供的 ManagedObjectCode 是:

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

1 回答 1

2

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

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

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

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

PS更改或您喜欢BeersDataModel的名称。BananasDataModel

于 2013-05-16T20:23:33.440 回答