Я пытаюсь использовать RestKit для разбора некоторых JSON. Приложение предназначено для отслеживания соревнований и имеет концепцию мест проведения, игр и игроков. В игре есть победитель и проигравший (оба игрока класса) и место проведения. JSON, возвращаемый веб-службы выглядит следующим образом:ResKit Object Сопоставление вложенных объектов
[{"id":1,"winner":{"name":"NAME2","id":2,"picture_url":"CK.png"},"loser":{"name":"NAME3","id":3,"picture_url":"NJ.png"},"venue":{"name":"Venue 1","id":2}},
{"id":2,"winner":{"name":"NAME2","id":2,"picture_url":"CK.png"},"loser":{"name":"NAME1","id":1,"picture_url":"NC.png"},"venue":{"name":"Venue 1","id":2}},
{"id":3,"winner":{"name":"NAME2","id":2,"picture_url":"CK.png"},"loser":{"name":"NAME3","id":3,"picture_url":"NJ.png"},"venue":{"name":"Venue 1","id":2}},
{"id":4,"winner":{"name":"NAME2","id":2,"picture_url":"CK.png"},"loser":{"name":"NAME1","id":1,"picture_url":"NC.png"},"venue":{"name":"Venue 1","id":2}}]
Мои файлы заголовков объекта выглядеть следующим образом:
# PTGame.h
@interface PTGame : NSObject
@property (nonatomic, assign) NSNumber *uid;
@property (nonatomic, assign) PTPlayer *winner;
@property (nonatomic, assign) PTPlayer *loser;
@property (nonatomic, assign) PTVenue *venue;
@end
# PTVenue.h
@interface PTVenue : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSNumber *uid;
-(CLLocation *)location;
-(CLLocationDistance)distanceFromLocation:(CLLocation *)location;
@end
# PTPlayer.h
@interface PTPlayer : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *pictureUrl;
@property (nonatomic, assign) NSNumber *uid;
@end
Наконец, мои настройки отображения выглядит следующим образом:
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[PTVenue class]];
[venueMapping addAttributeMappingsFromDictionary:@{@"name" : @"name",
@"id" : @"uid"}];
RKObjectMapping *playerMapping = [RKObjectMapping mappingForClass:[PTPlayer class]];
[playerMapping addAttributeMappingsFromDictionary:@{@"name" : @"name",
@"id" : @"uid",
@"picture_url": @"pictureUrl"}];
// Add Object Mapping for PTGame
RKObjectMapping *gameResponseMapping = [RKObjectMapping mappingForClass:[PTGame class]];
// Setup Game Object relationships
[gameResponseMapping addAttributeMappingsFromDictionary:@{@"id": @"uid"}];
[gameResponseMapping addRelationshipMappingWithSourceKeyPath:@"winner" mapping:playerMapping];
[gameResponseMapping addRelationshipMappingWithSourceKeyPath:@"loser" mapping:playerMapping];
[gameResponseMapping addRelationshipMappingWithSourceKeyPath:@"venue" mapping:venueMapping];
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *gameListResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:gameResponseMapping
method:RKRequestMethodGET
pathPattern:@"/games.json"
keyPath:nil
statusCodes:statusCodes];
[objectManager addResponseDescriptor:gameListResponseDescriptor];
Это все смотрит прямо на меня. При возврате результата ошибок не возникает, но позже я получаю исключение при попытке получить доступ к свойству игры. Взгляд на объекты через отладчик XCode показывает это:
Что-то кажется сломанным - почему эти строки показывают как «победитель» и «место». Почему uid
null? Объекты кажутся разными каждый раз, когда я делаю запрос, заставляя меня поверить, что память не обрабатывается должным образом.
Любые идеи?
ли объекты правильно после отображения кода выглядит нормально? Предполагает, что это ваше управление памятью в другом месте. Какой код работал до сбоя? – Wain