1

Core Data で同時実行を使用します。このような Apple ドキュメントでは、コンテキストの同期はアプリケーションのセマンティクスに依存するとよく言われました。また、s をマージする具体的なサンプルが見つかりませんUIManagedObjectContext。したがって、私のアプリではUIManagedObject、異なるコンテキストで異なるプロパティ値を持つ場合があります。オブジェクトを置き換えるか、そのプロパティを更新して、コンテキストをマージする必要があります。これが私のコードです:

- (void)__saveToMainContext
{
    if ([_context_ hasChanges])
    {
        NSError *error = nil;
        if (![_context_ save:&error])
        {
            if (error.code == NSManagedObjectMergeError)
            {
                for (NSMergeConflict* conflict in [[error userInfo] objectForKey:@"conflictList"])
                {
                    [_context_ refreshObject:[conflict sourceObject] mergeChanges:YES];
                }
            }
        }
    }
}

ただし、この方法では重複オブジェクトが作成されます。

4

1 に答える 1

1

理論的には、ドキュメントにあるように、好みのマージ ポリシーを選択してNSManagedObjectContextsに設定する必要があります。

ローカルの変更を保持するかどうか、ストレージを一度だけ保持するかどうかなどを決定できます。

enum {
   NSErrorMergePolicyType                      = 0x00,
   NSMergeByPropertyStoreTrumpMergePolicyType  = 0x01,
   NSMergeByPropertyObjectTrumpMergePolicyType = 0x02,
   NSOverwriteMergePolicyType                  = 0x03,
   NSRollbackMergePolicyType                   = 0x04
};

しかし、私はあなたがすでにこのことを知っていると思います. これらの状況をより簡単に処理するためのカテゴリを作成したら、ここで実装コードを見つけることができます。私自身、サイバースペースのどこかでその一部を見つけましたが、今はそれを見つけることができないため、他の著者を引用することはできません.

しかし、私のセグメントは常に次のとおりです。これを手動で処理しないでください。それはお尻の本当の痛みです。CoreData の管理にMagicalRecordを使用するのは本当に快適でした。魅力的に機能します。

于 2013-07-23T07:38:58.097 に答える