为了在第一次启动时在我的应用程序中预填充 CoreData,我包含了一个 PreModel.sqlite 文件,该文件以前由应用程序从它从 Web 服务下载的数据中创建,其中包括图像。
为了填充模型,我这样做:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSLog(@"creating new store");
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"PreModel.sqlite"];
if(![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {
NSString *sqlitePath = [[NSBundle mainBundle] pathForResource:@"PreModel" ofType:@"sqlite"];
if (sqlitePath) {
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtPath:sqlitePath toPath:[storeURL path] error:&error];
if (error) {
NSLog(@"Error copying sqlite database: %@", [error localizedDescription]);
}
}
}
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
它似乎工作。但我有两个问题:
- 如果 sqlite 文件只是一个数据库文件并且实际上不包含任何图像,那么应用程序如何在首次启动时查找和加载图像?
- 即使在应用程序的后续运行中,我每次都会看到“创建新商店”记录。为什么
_persistentStoreCoordinator
总是零?我清楚地在代码中设置它。