2

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
4

0 に答える 0