我正在对几年前的应用程序进行更新,并使用核心数据。以前的版本将其数据存储在Documents/app-name.sqlite中。我没有更改任何与更新中的数据相关的代码,但是当我第一次启动新版本时,在Library/Application Support/app-name.sqlite处创建了一个新的空数据存储。我不知道如何解决这个问题。核心数据在更新应用程序时创建额外的空存储
最初的核心数据设置是这样的:
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文件出现。
这里发生了什么,更重要的是,我该如何解决这个问题?谢谢。
就是这样!非常感谢! (请注意,实例化商店描述的调用实际上是[NSPersistentStoreDescription persistentStoreDescriptionWithURL:storeUrl]) 虽然我宁愿将事情转移到默认值,但老实说,迁移现有商店的最佳方法是什么到应用程序支持中的标准位置? –
我不知道是否有办法自动做到这一点,我可能只是使用NSFileManager手动移动它。 –