我在使用RestKit設置一些關係時遇到了最困難的時間。Restkit在嵌套的外鍵關係中使用@parent
從item
到venue
有一個一對多的關係,但是通過多層次的關係圖。
這裏的JSON結構的輪廓:
{
"id": 1,
"name": "Venue Name",
"sections": [
{
"id": 1,
"name": "Paper",
"categories": [
{
"id": 1,
"name": "Paper Goods",
"items": [
{
"venue" : 1
// Other data goes here
}
}
}
}
我試圖連接venue
外鍵的Venue
的id
屬性。
我曾嘗試做如下:
NSEntityDescription * itemEntity = [NSEntityDescription entityForName:@"DSItem" inManagedObjectContext:managedObjectStore.mainQueueManagedObjectContext];
NSRelationshipDescription * venueRel = [itemEntity relationshipsByName][@"venue"];
RKConnectionDescription * connection = [[RKConnectionDescription alloc] initWithRelationship:venueRel attributes:@{@"venue" : @"pk"}]; // id --> pk on DSVenue class
但會場屬性是對象映射後爲零。
我該如何使用@parent
來創建外鍵關係?或者,還有更好的方法?
喜歡的東西:
@{@"@[email protected]@parent.pk" : @"venue"}
我已經看過那個this SO問題,但它似乎適用於鏈接屬性父屬性,而不是外鍵關聯的實體。
任何幫助將不勝感激!
編輯:這是所有的映射代碼
RKEntityMapping *itemMapping = [RKEntityMapping mappingForEntityForName:@"DSItem" inManagedObjectStore:managedObjectStore];
itemMapping.identificationAttributes = [DSItem identificationAttributes];
[itemMapping addAttributeMappingsFromDictionary:[DSItem attributeMappings]];
NSEntityDescription * itemEntity = [NSEntityDescription entityForName:@"DSItem" inManagedObjectContext:managedObjectStore.mainQueueManagedObjectContext];
NSRelationshipDescription * venueRel = [itemEntity relationshipsByName][@"venue"];
RKConnectionDescription * connection = [[RKConnectionDescription alloc] initWithRelationship:venueRel keyPath:@"venue"];
[itemMapping addConnection:connection];
RKEntityMapping *categoryMapping = [RKEntityMapping mappingForEntityForName:@"DSCategory" inManagedObjectStore:managedObjectStore];
categoryMapping.identificationAttributes = [DSCategory identificationAttributes];
[categoryMapping addAttributeMappingsFromDictionary:[DSCategory attributeMappings]];
[categoryMapping addRelationshipMappingWithSourceKeyPath:@"items" mapping:itemMapping];
RKEntityMapping *sectionMapping = [RKEntityMapping mappingForEntityForName:@"DSSection" inManagedObjectStore:managedObjectStore];
sectionMapping.identificationAttributes = [DSSection identificationAttributes];
[sectionMapping addAttributeMappingsFromDictionary:[DSSection attributeMappings]];
[sectionMapping addRelationshipMappingWithSourceKeyPath:@"categories" mapping:categoryMapping];
RKEntityMapping *venueMapping = [RKEntityMapping mappingForEntityForName:@"DSVenue" inManagedObjectStore:managedObjectStore];
[venueMapping addAttributeMappingsFromDictionary:[DSVenue attributeMappings]];
venueMapping.identificationAttributes = [DSVenue identificationAttributes];
[venueMapping addRelationshipMappingWithSourceKeyPath:@"sections" mapping:sectionMapping];
RKResponseDescriptor *venueDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:venueMapping
method:RKRequestMethodGET
pathPattern:[DSVenue pathPattern]
keyPath:[DSVenue keyPath]
statusCodes:successIndexSet];
RKResponseDescriptor *itemDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:itemMapping
method:RKRequestMethodGET
pathPattern:[DSItem pathPattern]
keyPath:[DSItem keyPath]
statusCodes:successIndexSet];
[manager addResponseDescriptorsFromArray:@[itemDescriptor, venueDescriptor]];
你的JSON是嵌套的,所以你爲什麼要使用外鍵映射?你應該直接將映射關係鏈接起來。 – Wain
我需要能夠按地點對項目進行排序,基本上是。我如何將一個3級深的關係鏈接到最頂層的實體? –
您沒有鏈接到頂部映射的所有關係,它們都是在每個級別創建的。顯示要映射到的模型中的實體。 – Wain