私は数年前にコアデータを使用するアプリケーションの更新作業中です。以前のバージョンでは、そのデータはDocuments/app-name.sqliteに保存されていました。アップデートのデータ関連コードは変更していませんが、初めて新しいバージョンを起動すると、はライブラリ/アプリケーションサポート/ 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を使用して手動で移動する方法があります。 –