0

ここに簡略化された形式で示されているように、特定の JSON 構造のマッピングに問題があります。

{"personDetails":{"eyeColor":"brown",
                  "height":"2m 12cm",
                  "specialRestrictions":null,
                  "person":{"personId":42,
                            "firstName":"Hummingbird",
                            "lastName":"Collins",
                            "dob":1360856245000,
                            "gender":"F",
                            "personCode":"8DECCC6D-68CA-47E1-AV7F-84C2039D517",
                            "isAdmin":false}
                  }
}

"personId"この場合、フィールドまたは"person"オブジェクト自体をオブジェクトの主キーとして使用したいと考えてい"personDetails"ます。私が知る限り、これを行う方法はありません。を調べましRKConnectionDescriptionたが、外部キー属性だけでなくオブジェクト全体が埋め込まれているため、この場合は適用できないようです。

私は基本的に関係が 1 対 1 であることを望んでいます。つまり、このようにサービスを呼び出すと、

http://server/services/getPersonDetailsByID/42

詳細は、以前に保存されたPersonDetailsfor を上書きして、CoreData にマッピングおよび保持できます。Person現時点では、キーが配置されていないため、複数のPersonDetailsオブジェクトがPersonローカルに存在する可能性があります。

だから、私の質問はこれです: この意図した動作を達成するためにRestKitマッピングを設定できますか? または、古くなった CoreData オブジェクトを自分で削除する必要がありますか?

編集: これが私のマッピングが現在どのように見えるかです。

RKEntityMapping* personDetailsMapping = [RKEntityMapping mappingForEntityForName:
          @"personDetails" inManagedObjectStore:objectManager.managedObjectStore];
[personDetailsMapping addAttributeMappingsFromArray:@[@"eyeColor", @"height",  
                                                         @"specialRestrictions"]];
[personDetailsMapping addPropertyMapping:[RKRelationshipMapping
          relationshipMappingFromKeyPath:@"person" toKeyPath:@"person" 
                     withMapping:personMapping]]; // personMapping defined earlier

識別属性を追加しようとした 2 つの異なる方法を次に示します。

personDetailsMapping.identificationAttributes = @[@"person"];

personDetailsMapping.identificationAttributes = @[@"personId"];

それぞれが次のようなエラーをスローします。

Invalid attribute 'personId': no attribute was found for the given name in the 'PersonDetails' entity.
4

1 に答える 1

1

識別属性としてキー パスを追加すると機能する可能性があります。実際に試したことはありませんが、キーパスはほとんどの場所で機能します。

personDetailsMapping.identificationAttributes = @[ @"person.personId" ]

そうでない場合は、個人 ID を詳細オブジェクトにコピーするようにマッピングを設定できます。新しい永続属性を追加してから、マッピングでキー パスを使用する必要があります。

@"personId" : @"person.personId"
于 2013-08-07T14:20:15.333 に答える