0
restkit에서 매핑을 서로 종속시킬 수 있습니까? 어레이 IDLIST & 사람에 드릴 위해Restkit 매핑 종속성
{
"IdList": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"
],
“Persons”: [
{
"Id": 2,
"Name": “James”,
"Description": “Tall”,
"Items": [
{
"Id": 1051,
"Name": “Hat”,
"Description": "",
“Accesories”: []
}
]
}
]
}
I 2 응답 디스크립터가 : I는 다음 JSON 구조를 갖는다.
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider personsMapping] method:RKRequestMethodGET pathPattern:nil keyPath:@"Persons"statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self addResponseDescriptor:responseDescriptor];
RKResponseDescriptor *IdsResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider IdsMapping] method:RKRequestMethodGET pathPattern:nil keyPath:@"IdList" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self addResponseDescriptor:IdsResponseDescriptor];
내 매핑 코드 :
+ (RKDynamicMapping *)IdsMapping {
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Ids" inManagedObjectStore:[[CoreDataManager sharedInstance] objectStore]];
mapping.discardsInvalidObjectsOnInsert = YES;
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"theId"]];
RKDynamicMapping *idsMapping = [RKDynamicMapping new];
[dynamicTableIdsMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
if (!representation) {
return nil;
} else {
return mapping;
}
return nil;
}];
return dynamicTableIdsMapping;
}
+ (RKDynamicMapping *)personsMapping {
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Persons" inManagedObjectStore:[[CoreDataManager sharedInstance] objectStore]];
mapping.assignsNilForMissingRelationships = YES;
mapping.assignsDefaultValueForMissingAttributes = YES;
mapping.discardsInvalidObjectsOnInsert = YES;
[mapping addAttributeMappingsFromDictionary:@{
@"Id": @"remoteID",
@"Name": @"name"
}];
mapping.identificationAttributes = @[ @"remoteID" ];
[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"Items"
toKeyPath:@"products"
withMapping:[MappingProvider itemsMapping]]];
RKDynamicMapping * dynamicMenuMapping = [RKDynamicMapping new];
[dynamicMenuMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
if (!representation) {
return nil;
} else {
NSArray *categoryArray = [representation valueForKey:@"Items"];
if (!categoryArray || !categoryArray.count) {
return nil;
} else {
return mapping;
}
}
return nil;
}];
return dynamicMenuMapping;
}
어떻게 먼저 사람 배열을 매핑 관리하고 IDLIST 것? 사람이 값을 포함하는 경우 idList 배열 만 매핑하면됩니다. 필자는 Person의 데이터가 존재할 때 사용자가 새로운 뷰에 대해서만 제시되고 idList에 대해서도 제시되므로이 작업을 원한다. 따라서 persons 배열이 비어있는 경우 IdList를 매핑하는 것이 nessasary가 아닙니다.
답장을 보내 주셔서 감사합니다. 내 컨테이너 수업이 무슨 뜻인지 정확히 모르겠다. 정교하게 주시겠습니까? 고맙습니다. – 7c9d6b001a87e497d6b96fbd4c6fdf
당신이 물어 보는 것을하기 위해서는 1 개의 응답 기술자가 필요합니다. 자연스럽게 1 클래스 유형으로 매핑되지만 2 (중첩 된) 유형이 있습니다. 따라서 처리를 용이하게하기 위해 다른 클래스와 관계가있는 새 클래스를 만들어야합니다. – Wain
매핑이 완료된 후 서버 응답을 변경하거나 일부 데이터 만 삭제하는 것이 더 간단 할 수 있습니다 ... – Wain