1

iCloud をサポートするために、コア データ モデルを移行して、順序付けられた関係を通常の関係に置き換える必要があります。FUNCTION($source.project.tasks, "indexOfObject:" , $source)マッピング モデルを作成し、新しい属性 "index" を追加し、" " を使用して古いインデックスを取得することで、順序を維持しようとしました。($source.project.tasks は順序付きセットである必要があります。私のエンティティ "Project" と "Tasks" の関係は次のようになります: tasks <-->> project) 残念ながら、これは機能しません。起動時にアプリがクラッシュします (EXC_BAD_ACCESS)。

これが正しい方法かどうかはわかりません。私のアプローチを機能させる方法はありますか、それともより良い方法はありますか?

マッピング モデル

編集: $source.project.tasks は障害エラー メッセージを返します。 Relationship 'tasks' fault on managed object (0x1019f9130)

オブジェクトをログに記録するメソッド「indexOfTask:」を使用して NSManagedObject カテゴリを作成しました。

4

2 に答える 2

1

私は解決策を見つけました:使用されるすべてのメソッドFUNCTION(...)はid値を返す必要があるため、NSManagedObjectのカテゴリを作成し、このメソッドを追加しました:

- (NSNumber *)getIndexOfTask {
    NSUInteger index = [(NSOrderedSet *)[[(CTask *)self project] tasks] indexOfObject:self];
    if (index == NSNotFound)
        return @0;
    else
        return [NSNumber numberWithInteger:index];
}

このメソッドはインデックスを NSNumber として返し、以下で使用できますFUNCTION(...)

FUNCTION($source, "getIndexOfTask").intValue
于 2013-04-07T10:18:23.707 に答える
0

最初のアイデア: 別の名前 ( ではないindex) を使用してみてください。特別な意味があるようです。どうsequenceですか?

2 番目のアイデア: 2 段階の移行を行います。

中間ステップでは、インデックスを追加するだけです。すべての順序付きセットを繰り返し処理し、インデックスを設定して保存します。次に、順序付けられたセットを完全に削除する 2 番目の移行を行います。

(何か問題が発生した場合に安全側にいて、古いデータまたは中間データに戻るために使用できる複数のストア戦略が必要です。 )

于 2013-04-06T21:28:42.097 に答える