Core Data Persistent Store を使用する iOS アプリケーションがあります。数人でアプリケーションをテストしており、データ モデルに変更を加える必要があります。具体的には、属性の型を「NSString」から「int16_t」に変更します。
これが私がこれまでに行ったことです:
- 新しいモデル バージョンを作成しました
- 属性の種類を変更
- マッピング モデルを追加しました (ここで何が必要かわかりません。カスタム ポリシーを使用した EntityMapping が 1 つあります)。
- カスタム ポリシーの作成 (以下にリスト)
私はマジカルレコードを使用しています。移行は実行されていますが、データベースをクリアしているようです。SQLite ファイルをローカルで読み取ることができ、テーブル列の変更を確認できます (ただし、クリーンアップ、古いアプリ バージョンのロード、および移行の実行のたびにではありません)。
どうすればこのようなものを機能させることができますか? 文字列を動的に読み取り、正しい it 値を計算したいと思います。現在、NSNumber として 1 に設定しています。int に対して有効な NSExpression を作成する方法がわかりません
ここに私のカスタムポリシーがあります:
@implementation MessageLabelMigration
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)instance
entityMapping:(NSEntityMapping *)mapping
manager:(NSMigrationManager *)manager
error:(NSError **)error {
NSArray *_properties = [mapping attributeMappings];
NSLog(@"_properties: %@", _properties);
for (NSPropertyMapping *_property in _properties) {
if ([[_property name] isEqualToString:@"label"]) {
NSExpression *_expression = [NSExpression expressionForConstantValue:[NSNumber numberWithUnsignedShort:1]];
[_property setValueExpression:_expression];
}
}
return [super createDestinationInstancesForSourceInstance:instance
entityMapping:mapping
manager:manager
error:error];
}
@end