ここに簡略化された形式で示されているように、特定の 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
詳細は、以前に保存されたPersonDetails
for を上書きして、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.