하나 개의 요청에 두 개의 responseDescriptor에 대한지도는 JSON의 모습, 나에게 두 개의 데이터 일부를 제공이Restkit : 나는 요청을
{
"banner_content":
[
{
"activi_id":"1",
"activi_pic":
},
{
"activi_id":"2",
"activi_pic":
},
],
"categories":
[
{...},
{...},
]
}
내가 데이터를 매핑 responseDescriptor
을 쓸 때, 나는 정의해야합니다 발견 배열 및 categories
배열을 포함하는 모델 또는 다른 요청을 할 때 두 responseDescriptors 쓸 필요가, (RKMappingResult *)mappingResult
다음 두 개의 부분을 얻을 수 배열을 얻으려면 [mappingResult objectForKey:@"banner_content"]
및 [mappingResult objectForKey:@"categories"]
이상한 메시지입니다.
@implementation RCategory
+ (NSDictionary *)_mapping {
return @{@"title" : @"title"};
}
+ (RKObjectMapping *)mapping {
// Setup our object mappings
RKObjectMapping *categoryMapping = [RKObjectMapping mappingForClass:[self class]];
[categoryMapping addAttributeMappingsFromDictionary:[[self class] _mapping]];
RKObjectMapping *itemMapping = [RCategoryItem mapping];
RKRelationshipMapping* relationShipMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:@"content"
toKeyPath:@"items"
withMapping:itemMapping];
[categoryMapping addPropertyMapping:relationShipMapping];
return categoryMapping;
}
@end
파일 :
아래 내 코드 파일입니다 사람이 해결할 수있는 더 좋은 방법이 있나요 viewController.m
- (void)loadCategory {
// Load the object model via RestKit
RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKObjectMapping *categoryMapping = [RCategory mapping];
RKResponseDescriptor *categoryResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:categoryMapping
method:RKRequestMethodGET
pathPattern:nil
keyPath:@"category"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
RKObjectMapping *adsMapping = [RAd mapping];
RKResponseDescriptor *adResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:adsMapping
method:RKRequestMethodGET
pathPattern:nil
keyPath:@"banner_content"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
//** DO I MUST ADD TWO RESPONSE_DESCRIPTOR FOR ONE REQUEST??**
[objectManager addResponseDescriptor:categoryResponseDescriptor];
[objectManager addResponseDescriptor:adResponseDescriptor];
[objectManager getObjectsAtPath:RPATH(CATEGORY_PATH)
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSArray* statuses = [mappingResult array];
[self.categories addObjectsFromArray:statuses];
if ([self isViewLoaded]) {
[self.tableView reloadData];
}
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
NSLog(@"Hit error: %@", error);
}];
}
: RAd.m이
파일을 무시 내 문제? BTW 모델 클래스에 -mapping
이라고 쓰고 있습니다. 내가 생각할 수있는 가장 쉽고 좋은 방법입니다. 매핑을 어떻게 작성하는지 알고 싶습니다.
category와 banner_content 배열은 필자가 필요로하는 것이지만 래퍼 범주와 banner_content 인 경우 두 개의 rDescriptor가 필요하지 않다고 생각하지 않습니다. '매핑 만들기 모델 객체에 의해 반환 된 데이터는 괜찮습니다. ', 그것은 나의 의심이기도합니다. 어떻게 매핑을합니까? 새로운 ResponseDescriptor가 필요한 경우 MyModels.m에서 매핑을 작성합니다. 새 keypath를 새로 할당 할 수 있습니까? objectManager가 singeton이기 때문에 REQUEST 전에 항상 addResponseDescriptor가 필요하지 않습니다. ResponseDescriptors를 관리하는 방법은 무엇입니까? – aelam
개인적으로 필자는 내 데이터 모델을 소유하고이 모델에 대한 액세스를 제어하는 싱글 톤 (MyDataController)을 가지고 있습니다. 내 모델 객체 측면에서 인터페이스를 제공하고 가져 오기/편집/요청 방법을 제공합니다. 모든 매핑을 지정합니다. 종종 여러 개의 'RKObjectMapping' 인스턴스가 있습니다. – Wain
Wain과 완전히 일치하며, 2 개의 응답 디스크립터가 있고 "keyPath"인수를 사용하여 매핑에 사용할 식별자를 지정하면이 경우 가장 좋은 해결책입니다. –