以前は、データモデルのバージョン1からバージョン2への自動移行を正常に実装していました。現在、SDK 3.1.3を使用すると、バージョン2からバージョン3への移行が失敗し、次のエラーが発生します。
未解決のエラーエラードメイン=NSCocoaErrorDomainコード=134110UserInfo= 0x5363360 "操作を完了できませんでした。(Cocoaエラー134110。)"、{NSUnderlyingError=エラードメイン=NSCocoaErrorDomainコード=256UserInfo = 0x53622b0 "操作を完了できませんでした。(ココアエラー256.) "; reason="移行の最初のパス後に新しいストアを保存できませんでした。"; }
を使用した自動移行と、のみを使用しNSMigratePersistentStoresAutomaticallyOption
たNSInferMappingModelAutomaticallyOption
移行を試しNSMigratePersistentStoresAutomaticallyOption
、v2からv3へのマッピングモデルを提供しました。
上記のエラーがログに記録され、アプリケーションで使用できるオブジェクトがありません。ただし、アプリケーションを終了して再度開くと、すべてが正常に機能しています。
私が使用しているコアデータの方法は次のとおりです
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"MYAPP" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP.sqlite"]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return persistentStoreCoordinator;
}
シミュレーターでは、これによりMYAPP〜.sqliteファイルとMYAPP.sqliteファイルが生成されることがわかります。MYAPP〜.sqliteファイルを削除しようとしましたが、
BOOL oldExists = [[NSFileManager defaultManager] fileExistsAtPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP~.sqlite"]];
常にNOを返します。どんな手掛かり?私は何か間違ったことをしていますか?前もって感謝します。