iPhoneのコアデータから始めたばかりで、軽量マイグレーションで問題が発生しました。iPhone Core Data軽量マイグレーション:モデルをマージできない
- 私は私の古いモデルに2つの新しいフィールドを追加
- は
- モデルクラスファイルを再生し、現在のバージョンと新しいモデルバージョンを作った
は、テンプレートにAppDelegateに次のコードを追加しました
を生成NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES]、NSMigratePersistentStoresAutomaticallyOption、[NSNumber numberWithBool:YES]、NSInferMappingModelAutomaticallyOption、nil];
([persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType設定:ゼロのURL:storeURLオプション:オプション・エラー:&エラー]!)場合は{
続いて最後に、私は、アプリを実行する前にクリーンビルドをしました。
アプリがクラッシュし、私は次のエラーを取得する...
デバッグに今The operation couldn’t be completed. (Cocoa error 134140.)" UserInfo=0x622b350 {reason=Can't find or automatically infer mapping model for migration
私は、これは次の結果を表示...
NSError *error = nil;
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:storeURL error:&error];
if (!sourceMetadata) {
NSLog(@"sourceMetadata is nil");
} else {
NSLog(@"sourceMetadata is %@", sourceMetadata);
}
を次のコードを追加しました。 ..
2011-01-20 18:18:41.018 MyApp[4438:207] sourceMetadata is {
NSPersistenceFrameworkVersion = 248;
NSStoreModelVersionHashes = {
Fugitive = <e33370b6 e7ca3101 f91d2595 1e8bfe01 3e7fb4de 6ef2a31d 9e50237b b313d390>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "E711F65F-3C5A-4889-872B-6541E4B2863A";
"_NSAutoVacuumLevel" = 2;
}
Pバンドル> MyApp.momd> VersionInfo.plist
その得た以下の内容をファイルに...私はここに
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSManagedObjectModel_CurrentVersionName</key>
<string>MyApp 2</string>
<key>NSManagedObjectModel_VersionHashes</key>
<dict>
<key>MyApp</key>
<dict>
<key>Fugitive</key>
<data>
4zNwtufKMQH5HSWVHov+AT5/tN5u8qMdnlAje7MT05A=
</data>
</dict>
<key>MyApp 2</key>
<dict>
<key>Fugitive</key>
<data>
N58Lf4BNpACzrsHAb1+BQImgjsBZ+u5G0wGUyt84+Ec=
</data>
</dict>
</dict>
</dict>
</plist>
何をしないのですか?
UPDATE:この問題は、モデルで見逃していたデフォルト値属性であることが判明しました。
PropertyList EditorでVersionInfo.plistを開いたときに、逃亡のデータ項目はどのように見えますか?生のXMLでは、64ビットでエンコードされているように見えます。メタデータ呼び出しによって提供される16進表現と簡単に比較するのは難しいです(少なくとも私にとって)。 – westsider
'4zNwtufKMQH5HSWVHov + AT5/tN5u8qMdnlAje7MT05A =' ==あなたのオリジナルモデルはあなたの "MyApp"モデルと一致しています。これはいい。 –
westsider