我正在對幾年前的應用程序進行更新,並使用核心數據。以前的版本將其數據存儲在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手動移動它。 –