1

CoreData モデルを MongoDB と同期させる方法についての指針を探しています。私は ObjCMongoDB フレームワークを利用しており、次のようにコア データにオブジェクトを作成できます。

coreDataObj = [BSONDecoder decodeManagedObjectWithClass:[Hostname class]
                                                context:[self managedObjectContext]
                                                   data:[bson_host dataValue]];

残念ながら、MongoDB を再インポートすると、同じオブジェクトのコピーが作成されて保存されます。

ObjCMongoDB フレームワークを正しく使用していないのか、それとも SyncServices を使用してコアデータ モデルにデータをインポートする必要があるのか​​がわかりません。

誰かが私を案内したり、例を提供したりできますか?

4

1 に答える 1

0

ObjCMongoDB (私が作成したもの) は Core Data への逆シリアル化を実行しますが、現時点では重複排除や同期は実行しません。BSON ドキュメントは、識別属性の意味を持たない単純な順序付けられた辞書として扱われます。_id特に、他のキーと同じように扱われます。

必要な動作を取得できますが、自分で実装する必要があります。

最も簡単な方法は、NSManagedObject サブクラスで or (どちらでも構いません)-awakeAfterUsingCoder:を実装することです。-awakeAfterUsingBSONDecoder:デコーダーはこれらを自動的に呼び出します。

selfデシリアライズされた新しいオブジェクトになります。selfフェッチ リクエストを実行して、重複する既存のエントリを探します。見つかった場合は、プロパティを既存のオブジェクトに適用し、新しいオブジェクトをコンテキストから削除して、既存のエントリを返します。見つからない場合は、単純に を返しselfます。

とを使用-dictionaryWithValuesForKeys:-setValuesForKeysWithDictionary:てこれを実現できます。私は通常、次のような方法でキーのリストを取得します。

+ (NSArray *) persistentKeysForEntity:(NSEntityDescription *) entity {
    NSMutableArray *result = [NSMutableArray array];
    for (NSPropertyDescription *pdesc in [entity properties]) {
        if ([pdesc isTransient]) continue;
        [result addObject:pdesc.name];
    }
    return [result copy];
}

追加:一時的な属性を除外する必要がない場合は、1 行で値を適用できます。

[target setValuesForKeysWithDictionary:[self dictionaryWithValuesForKeys:self.entity.attributesByName.allKeys]];
于 2013-07-17T13:37:32.930 に答える