我有一个单例数据控制器来保存一个对象数组。例如,参见我的解决方案的香蕉问题:singelton dataController banansArray
现在我想将香蕉阵列保存到持久状态。这个核心数据教程:core data - store images让我对核心数据有了一个很好的了解,并且在将数据控制器更改为单例之前,我能够将它包含在我的应用程序中。
现在什么是最好的?
我是否需要将应用程序委托中生成的Core Data堆栈移动到管理bananas数组的singletonDataController?或者,我是否必须像使用Core Data模板生成的Master-View控制器一样在应用程序委托中设置单例的上下文?
在这种情况下,如何在appDelegate中设置上下文?
这在AppDelegate应用程序didFinishLaunchingWithOptions:
DataControllerSingleton *dataController;
dataController.managedObjectContext = self.managedObjectContext;
在beerDataModel示例中,ManagedObjectCode为:
if (_mainContext == nil) {
_mainContext = [[NSManagedObjectContext alloc] init];
_mainContext.persistentStoreCoordinator = [self persistentStoreCoordinator];
}
答案 0 :(得分:2)
根据您的问题,我认为这是个人选择。例如,在我的项目中,我更喜欢维护一个单例类来管理Core Data堆栈并在整个应用程序中使用它。我更喜欢让app delegate干净。
无论如何,现在如果你使用Core Data,那么管理对象数组的旧单例就不再有用了。使用Core Data,您可以获得可以从持久性存储中获取的对象图(例如)。显然,您需要正确设计模型(实体,关系等)。例如,在您的情况下,具有正确属性的Banana
实体是正确的选择。
要查看单例类,请查看@BenSheirman的BeerDataModel.h/.m
。这是一个非常好的方法。它可以像下面这样使用。
NSManagedObjectContext *mainContext = [[BeersDataModel sharedDataModel] mainContext];
P.S。更改BeersDataModel
中的BananasDataModel
或您喜欢的名称。