【发布时间】:2017-08-04 17:53:11
【问题描述】:
我正在对一个使用了几年并使用 Core Data 的应用进行更新。以前的版本将其数据存储在 Documents/app-name.sqlite 中。我没有在更新中更改任何与数据相关的代码,但是当我第一次启动新版本时,它在 Library/Application Support/app-name.sqlite 创建了一个新的空数据存储。 我不知道如何解决这个问题。
Core Data 的初始设置如下所示:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:SKCoreDataModelName withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[SKCoreDataModelName stringByAppendingString:@".sqlite"]];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *opts = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:opts error:&error]) {
SKLogError(@"Unresolved error when creating persistent store coordinator %@, %@", error, [error userInfo]);
}
这似乎在新版本中正常工作:没有触发错误,没有创建新数据库。当我实例化持久化容器时出现问题:
_persistentContainer = [[NSPersistentContainer alloc] initWithName:SKCoreDataModelName];
[_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *storeDescription, NSError *error) { ... }];
通过这个可以看到,当我初始化NSPersistentContainer时,模拟器数据中出现了Library/Application Support文件夹;当我调用loadPersistentStoresWithCompletionHandler 时,新的sqlite 文件就会出现。
这里发生了什么,更重要的是,我该如何解决?谢谢。
【问题讨论】: