2015-03-27 1 views
0

Учитывая следующую структуру JSON:Mapping элементы верхнего уровня и вложенные массивы с RestKit

{ 
    "foo": { 
    "anno": "blah", 
    "domini": null, 
    "locations": [ 
     { 
     "data": { 
      "lat": null, 
      "lon": null 
     }, 
     "data": { 
      "lat": null, 
      "lon": null 
     } 
     } 
    ] 
    } 
} 

Как настроить RestKit отображения для этого сценария? Я, хотя у меня это было, но я не могу отобразить элементы foo верхнего уровня anno и domini. Я могу успешно сопоставлять местоположения самостоятельно, но не в координации с foo.

Я сделал это успешно в прошлом, но сейчас что-то ускользает от меня.

foo.h

@interface Foo : NSObject 
@property (nonatomic, strong) NSString *anno; 
@property (nonatomic, strong) NSString *domini; 
@end 

Location.h

@interface LocationData : NSObject 
@property NSString *lat; 
@property NSString *lon; 
@end 

Controller.m

RKObjectMapping *fooMapping = [RKObjectMapping mappingForClass:[Foo class]]; 
[fooMapping addAttributeMappingsFromArray:@[@"anno", @"domini"]]; 

RKObjectMapping *locationMapping = [RKObjectMapping mappingForClass:[Location class]]; 
[locationMapping addAttributeMappingsFromArray:@[@"lat",@"lon"]]; 

[fooMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"location" toKeyPath:@"location" withMapping: locationMapping]]; 

RKResponseDescriptor *fooReponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:dataMapping method:RKRequestMethodGET pathPattern:@"foo" keyPath:@"foo" statusCodes:[NSIndexSet indexSetWithIndex:200]]; 

RKResponseDescriptor *locationResponseDescriptor = 
     [RKResponseDescriptor responseDescriptorWithMapping:locationdMapping 
                method:RKRequestMethodGET 
               pathPattern:nil 
                keyPath:@"foo.location" 
               statusCodes:[NSIndexSet indexSetWithIndex:200]]; 

Я думаю, что это все из важного материала. Надеюсь, в моем рвении, чтобы оценить, сколько текста я публиковал, я не оставил ничего важного.

EDIT 2015-03-29

- (void)loadChildren { 

NSDictionary *queryParams = @{@"sort" : @"new"}; 

[[RKObjectManager sharedManager] getObjectsAtPath:redditPath 
             parameters:queryParams 
              success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
               _children = mappingResult.array; 
               [self.tableView reloadData]; 
              } 
              failure:^(RKObjectRequestOperation *operation, NSError *error) { 
               NSLog(@"You mean YOU'RE the lunatic who's responsible for almost destroying my ship? : %@", error); 
              }]; 
} 

redditpath установлен ранее, используя ...

redditPath = [NSString stringWithFormat:@"/r/%@/new.json", subRedditToLoad]; 

Где subRedditToLoad, в данном случае, ЗВС.

+0

Показать код и модель. Что скажет журнал трассировки? – Wain

+0

Неправильный ключевой путь для местоположений. Что GET вы называете (какой путь)? – Wain

+0

_Ключевой путь для местоположений неверен. Я подозревал, что так много. Я не уверен, что вы просите в re: GET? –

ответ

0

В вашей XCDataModel Возьмите сущность с именем Foo. Установить свойство anno и vomini.

Также создайте еще одно предприятие Местоположение. Задайте объект под названием данные с типом Transformable.

Добавить Отношения в Foo для определения местоположения положите ему много отношений.

отображение вызовов для Foo Like:

[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"foo" toKeyPath:@"Foo" withMapping:[Location objectMappingForLocation:Enum]]];