这些模板包括一些核心数据设置,但远非强制性。您可以使用任何项目中的核心数据。如果您愿意,您可以从空应用程序中获取代码,并在您的项目中使用它。
如果查看生成的代码,您将看到用于构建核心数据堆栈的三个主要组件的三个“getter”。
managedObjectModel 使用捆绑包中的模型文件创建模型。通过 New-File 并选择 Core Data Data Model 在 Xcode 中轻松创建。
persistentStoreCoordinator 使用模型和 SQL 存储。
最后,通过使用 persistentStoreCoordinator 创建 managedObjectContext。请注意,如果您愿意,您确实可以通过一种方法构建该堆栈。没有要求有这些单独的访问者......
你可以做这样的事情......
- (NSManagedObjectContext*)setupCoreDataStack
{
// Load the model description
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"APPNAME" withExtension:@"momd"];
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
// Prepare the persistent store coordinator - needs the model
NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [applicationDocumentsDirectory URLByAppendingPathComponent:@"APPNAME.sqlite"];
NSError *error = nil;
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{
// Handle the error !!!!!
// exit the function
return nil;
}
// Create the managed object context. This is what you will really
// use in the rest of your program.
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[moc setPersistentStoreCoordinator:psc];
return moc;
}
现在你的筹码和其他人几乎一样。唯一真正的区别是这里的 MOC 使用的是主队列并发类型,这是一个更好的选择。
如果您想拥有更好的性能模型,请插入父 moc。
实际上,如果您没有采用当前的核心数据策略,我建议您使用 UIManagedDocument。