注意!Core Data Migration - Table Already Existsを見たことがありますが、問題は解決しませんでした。
私は自分のデータ モデルの軽量の移行を行おうとしていますが、この時点で失敗しています。
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
store = [self addPersistentStoreWithType:NSSQLiteStoreType configuration:nil
URL:url options:options error:&error];
エラーメッセージは次のとおりです。
2012-09-06 17:14:19.450 Selene[79064:c07] CoreData: error: (1) I/O error for database at /Users/colin/Library/Application Support/iPhone Simulator/5.1/Applications/E1638F38-B13A-4728-91CD-CC380E761544/Library/Application Support/Selene/.Selene.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'table ZMEASUREMENT already exists'
データ モデルに対する実際の変更は、完全に異なるテーブル ZCYCLE にオプションの文字列列を 1 つ追加することです。したがって、ZMEASUREMENT について文句を言っても意味がありません。
コア データのインスタンス化を実行しましたが、NSManagedObjectModel は正しく読み込まれているように見えます (新しいバージョン)。URLは正しいです。
xcode で Clean を作成し、iOS シミュレーターで内容と設定をリセットし、(Core Data を使用して) バージョン 1 の sqlite ファイルを最初から再生成し、バージョン 2 への移行を再度試みました。サイコロはありません。したがって、私のsqliteファイルが何らかの理由で破損しているわけではありません。
データ モデル情報は、クリーニングで見逃した可能性のある別の場所に保存されていますか?
軽量の移行で実際に何が起こっているかをデバッグする他の方法はありますか? 上記の「テーブルが既に存在します」というエラー以外の情報が見つかりません。これは意味がありません。addPersistentStoreWithType: 内で何が起こっているかは、私にはわかりません。
移行を続行するために私が見つけた唯一の方法は、移行の一環として、Core Data が不満を言っているテーブルの名前を ZMEASUREMENT に変更することです。これは 1 回の移行でのみ機能し、2 回目の移行を行うにはテーブルの名前を再度変更する必要があります。データモデルを変更するたびに名前を変更しなければならないテーブルという考えには、私は本当に満足していません。確かに Core Data はこれほど壊れていません。
編集: 役立つ場合は、テーブル ZMEASUREMENT の属性のリストを次に示します。これは何か変ですか?
@property (nonatomic) int epochDay; // Integer32 indexed
// time as number of seconds since local midnight, to avoid time zone and DST issues
@property (nonatomic, strong) NSNumber *localTime; // Integer32 optional
// stored in Kelvins, to force me to test temperature conversion code properly
@property (nonatomic, strong) NSNumber *temperatureK; // Float optional
@property (nonatomic) BOOL excludeTemperature; // Boolean default=NO
@property (nonatomic, strong) NSNumber *fluidCode; // Integer16 optional
@property (nonatomic, strong) NSNumber *openingCode; // Integer16 optional
@property (nonatomic, strong) NSNumber *positionCode; // Integer16 optional
@property (nonatomic, strong) NSNumber *textureCode; // Integer16 optional
@property (nonatomic, strong) NSNumber *rateCode; // Integer16 optional
@property (nonatomic, strong) NSNumber *heightCode; // Integer16 optional
// try renaming the internal property to see if it helps lightweight migration
@property (nonatomic, strong) NSString *commentDPL; // String optional
@property (nonatomic, strong) NSString *comment; /* derived property (alias for commentDPL) */
@property (nonatomic, strong) NSSet *notes; // Optional to-many relationship to MeasurementNote
オプションではないフィールドは、epochDay と excludeTemperature のみです。