2

RestKitAPIを使用して CoreData オブジェクトへの応答のマッピングを実現する方法を理解しようとしています。はJSOG標準を使用します。次に例を示します。API

[
    {
        "@id": "1",
        "name": "Sally",
        "friend": {
            "@id": "2",
            "name": "Bob",
            "friend": {
                "@id": "3",
                "name": "Fred",
                "friend": { "@ref": "1" }
            }
        }
    },
    { "@ref": "2" },
    { "@ref": "3" }
]

RKEntityMappingそのような のを作成するにはどうすればよいJSONですか? 単純な属性のマッピングは簡単です。問題は@ref、トップレベルのユーザー オブジェクトに@refのみが含まれている場合でも、 と連携するようにここで関係をセットアップする方法です。

RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:@"Question"
                                                   inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore];

[userMapping addAttributeMappingsFromDictionary:@
 {
     @"@id" : @"identifier",
     @"name" : @"name"
 }];

[userMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"friend"
                                                                            toKeyPath:@"friend"
                                                                          withMapping:userMapping]];

私の推測では、以下のコードを使用し@refてオブジェクトの内部を処理できます。

[userMapping addConnectionForRelationship:@"friend" connectedBy:@{@"@ref": @"@id"}];

しかし、それは正しいですか?

  1. 完全なオブジェクトまたは既に提供されているオブジェクトへの参照 (を介して@ref) を実際の Core Data オブジェクトにマップするにはどうすればよいですか?
  2. UserJSON の上位要素 (オブジェクトのリスト) を実際のUserエンティティのリストにマップするにはどうすればよいですか?
4

1 に答える 1

2

マッピング自体を使用して関係を追加し、再帰的にドリルします。参照に外部キー マッピングを使用します。


コメントに続いてこれをもう一度見てみると、実際には外部キーの代わりに動的マッピングの良い候補になるかもしれません。これは、接続のみを使用する新しいマッピングと@"@ref" : @"identifier"、キーを見て、この接続マッピングを使用するか完全な を使用するかを決定する動的マッピングを作成することを意味しますuserMapping

これらのマッピングはどちらも、それidentifierがオブジェクトの一意のキーであることを指定する必要があることに注意してください。重複を作成する代わりに、メモリ キャッシュを使用して既存のオブジェクトを検索できるようにする必要があります。

于 2016-01-20T23:26:42.810 に答える