Добрый день, все!Отображение вложенных объектов и массивов
Я пытаюсь выяснить, как сопоставлять объекты с вложенными массивами, но мой проект продолжает прерываться из-за неперехваченного исключения. Я предполагаю, что я не правильно что-то сопоставляю, но мне говорят, что что-то не соответствует кодированию ключевого значения.
Как сопоставить объект с вложенным массивом?
Ниже приведен пример JSON. Я пытаюсь отобразить, интерфейс и реализацию, а также ошибку, которая бросается соответственно. Наконец, есть ссылка на мой проект на GitHub, если я ничего не оставил, или увидеть, что полный источник будет полезен.
JSON
{
"href": "string",
"items": [
{
"type": "string",
"status": "string",
"name": "string",
"publisher": "string",
"publisherId": "string",
"description": "string",
"url": "string",
"smallLogoImageUrl": "string",
"tileImageUrl": "string",
"heroImageUrl": "string",
"tags": [
"string",
"string"
],
"createdOn": "2015-04-22T18:55:40.782Z",
"downloadUrl": "string",
"getProductCodeUrl": "string",
"metadata": {
"exeType": "string",
"packageFileName": "string",
"installDirectory": "string",
"executableName": "string"
},
"id": "string"
}
]
}
интерфейс (.h)
@interface SFrontPageItem : NSObject
@property (nonatomic, strong) NSString *type;
@property (nonatomic, strong) NSString *status;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *publisher;
@property (nonatomic, strong) NSString *publisherId;
@property (nonatomic, strong) NSString *productDescription;
@property (nonatomic, strong) NSString *url;
@property (nonatomic, strong) NSString *smallLogoImageUrl;
@property (nonatomic, strong) NSString *tileImageUrl;
@property (nonatomic, strong) NSString *heroImageUrl;
@property (nonatomic, strong) NSArray *tags;
@property (nonatomic, strong) NSString *createdOn;
@property (nonatomic, strong) NSString *downloadUrl;
@property (nonatomic, strong) NSString *getProductCodeUrl;
@property (nonatomic, strong) NSArray *metadata;
@property (nonatomic, strong) NSString *productID;
@end
@interface SFrontPage : NSObject
@property (nonatomic, strong) NSString *href;
@property (nonatomic, strong) NSArray *items;
@end
реализации (.m)
- (void) getFrontPage
{
AppDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
RKObjectMapping *itemMapping = [RKObjectMapping mappingForClass:[SFrontPageItem class]];
[itemMapping addAttributeMappingsFromDictionary:@{
@"type": @"type",
@"status": @"status",
@"name": @"name",
@"publisher": @"publisher",
//@"publisherId": @"publisherId",
@"description": @"description",
@"url": @"url",
//@"smallLogoImageUrl": @"smallLogoImageUrl",
@"tileImageUrl": @"tileImageUrl",
//@"heroImageUrl": @"heroImageUrl",
//@"tags": @"tags",
@"createdOn": @"createdOn",
//@"downloadUrl": @"downloadUrl",
//@"getProductCodeUrl": @"getProductCodeUrl",
//@"metadata": @"metadata",
@"id": @"productID"
}];
//itemMapping.forceCollectionMapping = YES;
RKObjectMapping *frontpageMapping = [RKObjectMapping mappingForClass:[SFrontPage class]];
[frontpageMapping addAttributeMappingsFromDictionary:@{
@"href": @"href"
}];
[frontpageMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"items"
toKeyPath:@"items"
withMapping:itemMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:frontpageMapping
method:RKRequestMethodGET
pathPattern:nil
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self.objectManager.HTTPClient setAuthorizationHeaderWithUsername:self.sconnection.apiKey.key password:self.sconnection.apiKey.secret];
[self.objectManager addResponseDescriptor:responseDescriptor];
[self.objectManager getObjectsAtPath:@"/api/frontpage/rest" parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
{
SFrontPage *newFrontpage = result.firstObject;
NSLog (@" HREF: %@", newFrontpage.href);
//NSLog (@"ITEMS: %@", newFrontpage.items.firstObject);
//SFrontPageItem *newFrontpageItem = newFrontpage.items.firstObject;
//NSLog (@"Unexpected Great Thing %@", newFrontpageItem);
[appDelegate.loginViewController apiConnectionSuccess];
} failure:^(RKObjectRequestOperation *operation, NSError *error)
{
[appDelegate.loginViewController updateLoginWindowHeaderLabelTo:@"Unable to Load Frontpage"];
[appDelegate.loginViewController apiConnectionFailure];
}];
}
Ошибка
[<SFrontPageItem 0x6180001026d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key description.
Источник
Полный источник можно найти on GitHub, с соответствующими файлами будучи APIManager.h & APIManager.m.
Надеюсь, что я был достаточно ясен, я иногда пропускаю отметку при формировании вопроса о чем-то, что я не совсем понимаю. Я новичок в ObjC и RestKit, поэтому я уверен, что в моем коде уже много запутанных вещей. Спасибо, что нашли время, чтобы прочитать его, и рассмотрите мой вопрос. Если я смогу прояснить что-нибудь, пожалуйста, дайте мне знать!
Michael
Я этого не понимал, спасибо! Я немного ошеломлен, что это была целая проблема. Идет, чтобы показать, насколько важна двойная проверка этих вещей. Я приму свой ответ, как только это позволит. –
Об этих ошибках можно провести свое время. Я получил сообщение об ошибке, в котором говорится, что он не может найти 'описание'. Ну, и я тоже. ;-) –