2016-10-01 8 views
1

Xcode8を使用してコアデータスキーマの軽量マイグレーションを実行しようとしていて、奇妙な問題が発生しています。私は、オプション辞書にYESに設定NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption旗の両方で、更新後に店をロードする最初の時間は、私はこのエラーに遭遇:Xcode8とCore Data自動軽量マイグレーション

2016-10-01 09:59:17.307862 CJournal[1162:549816] loadLocalStoreIntoPSC using store = file:///private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite 
2016-10-01 09:59:18.373568 CJournal[1162:549816] [error] error: Failed to delete support directory for store: /private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/.ContactsJournal.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3 
2016-10-01 09:59:18.656164 CJournal[1162:549816] [error] error: CoreData: error: (migration) migration failed with error (null) 
2016-10-01 09:59:18.664001 CJournal[1162:549816] [error] error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite options:{ 
    NSInferMappingModelAutomaticallyOption = 1; 
    NSMigratePersistentStoresAutomaticallyOption = 1; 
} ... returned error Error Domain=NSSQLiteErrorDomain Code=8 "(null)" UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite, Source database Path=/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/.ContactsJournal.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3, reason=Failed to replace destination database} with userInfo dictionary { 
    NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/ContactsJournal.sqlite"; 
    "Source database Path" = "/private/var/mobile/Containers/Shared/AppGroup/04521C25-2FE6-4CFD-ACB5-70550B63499E/.ContactsJournal.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3"; 
    reason = "Failed to replace destination database"; 
} 

これはiOS10シミュレータとiOS10デバイスの両方で起こっています。奇妙なことは、2回目の実行でアプリケーションを実行し、移行を試みると、何のエラーもなく正常に実行されます。

これは私が店を追加するために使用するコードです:

NSMutableDictionary *options = [NSMutableDictionary dictionaryWithObjectsAndKeys:@YES, NSMigratePersistentStoresAutomaticallyOption, @YES, NSInferMappingModelAutomaticallyOption, nil]; 

NSPersistentStore *newStore = [self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:localStoreURL options:options error:&error]; 

は、私はまた、「起動時に渡される引数」に-com.apple.CoreData.MigrationDebug 1フラグを使用してみましたが、それは役立つかもしれない任意の出力を生成しません。 。

何が問題になるか、またはバリデーションの問題により移行が失敗した場合にデバッグする方法を教えてください。

答えて

0

軽量移行の前に、私は既存のデータベースのバックアップをとっていたので、通常のスタックとは別にNSPersistentStoreCoordinatorを作成していました。軽量化せずにpersistentStoreを追加しました移行オプション。これは明らかに、バックアッププロセスが完了した後であっても、メインコアデータスタックのpersistentStoreCoordinator上の移行を防止していたストアファイルにロックをかける。修正は、バックアップpersistentStoreCoordinatorからpersistentStoreを削除することでした。これにより、移行が正常に動作し、addPersistentStoreWithTypeはこの時点でエラーをスローしません。