2013-05-10 10 views
0

Я Не удалось правильно отобразить изображения из моего JSON, и я не могу понять, почему.RestKit not mapping Изображения от JSON

Вот ошибка: «W restkit.object_mapping: RKObjectMappingOperation.m: 244 Не удалось преобразование значения в„изображений ключевого пути“Нет стратегии перехода от„__NSArrayM“до„изображения“.»

Здесь JSON:

{ 
    "timestamp": "2013-05-10T03:09:39Z", 
    "feed": [{ 
     "headline": "Head text", 
     "links": { 
      "api": { 
       "news": { 
        "href": "http://api.website.com/v1/91" 
       }, 
       "self": { 
        "href": "http://api.website.com/v1/91" 
       } 
      }, 
      "web": { 
       "href": "http://website.com/the/story" 
      }, 
      "mobile": { 
       "href": "http://m.website.com/wireless/story?storyId=9254113" 
      } 
     }, 
     "source": "Associated Press", 
     "description": "Description text.", 
     "images": [{ 
      "height": 324, 
      "alt": "", 
      "width": 576, 
      "name": "Name text", 
      "caption": "Caption text.", 
      "url": "http://a.website.com/media/2013/0508.jpg" 
     }], 

Feed.h

@property (nonatomic, strong) Links *links; 
@property (nonatomic, strong) Images *images; 
@property (nonatomic, strong) Video *video; 
@property (nonatomic, strong) NSString *headline; 
@property (nonatomic, strong) NSString *source; 
@property (nonatomic, strong) NSDate *published; 
@property (nonatomic, strong) NSString *description; 
@property (nonatomic, strong) NSString *premium; 

+ (RKObjectMapping *) mapping; 

Feed.m

+ (RKObjectMapping *)mapping { 
    RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[self class] usingBlock:^(RKObjectMapping *mapping) { 
     [mapping mapKeyPathsToAttributes: 
     @"headline", @"headline", 
     @"source", @"source", 
     @"published", @"published", 
     @"description", @"description", 
     @"premium", @"premium", 
     nil]; 
     [mapping hasOne:@"links" withMapping:[Links mapping]]; 
     [mapping hasOne:@"images" withMapping:[Images mapping]]; 
     //[mapping hasMany:@"images" withMapping:[Images mapping]]; 
     [mapping hasOne:@"video" withMapping:[Video mapping]]; 
    }]; 

    return objectMapping; 
} 

Images.h

@property (nonatomic, strong) NSNumber *height; 
@property (nonatomic, strong) NSNumber *width; 
@property (nonatomic, strong) NSString *caption; 
@property (nonatomic, strong) NSURL *url; 

+ (RKObjectMapping *) mapping; 

Images.m

+ (RKObjectMapping *)mapping { 
    RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[self class] usingBlock:^(RKObjectMapping *mapping) { 
     [mapping mapKeyPathsToAttributes: 
     @"height", @"height", 
     @"width", @"width", 
     @"caption", @"caption", 
     @"url", @"url", 
     nil]; 
    }]; 

    return objectMapping; 
} 

Все остальное отображение правильно, кроме изображений. Я не знаю, связано ли это с тем, что это массив, но он имеет только один результат, поэтому его не обязательно является массивом? И если это не так, то как я это напишу ... Я просто не совсем понимаю, почему это не сопоставление.

Как вы можете видеть, я пробовал как hasMany:, так и hasOne: картографирование и не работал, я получил ту же ошибку.

Я пробовал использовать NSLog(@"url image: %@", feedLocal.images.url);' but get (null) . Even though I thought it would work because NSLog (@ "href web:% @", feedLocal.links.web.href); `отлично работает для моих ссылок href.

Любая помощь будет принята с благодарностью, спасибо большое!

+0

Restkit Не поймет массив - используйте трансформируемые! –

+0

@BharatGulati Спасибо за ответ! Я не уверен, что это значит, можете ли вы дать мне фрагмент кода? – Realinstomp

ответ

1

В Feed.h вам нужно изменить images свойство быть:

@property (nonatomic, strong) NSArray *images; 

И вы должны установить отображение на hasMany:.

+0

благодарит за ответ! Когда я меняю код на ваше предложение, я получаю сообщение об ошибке, что «url свойства не найден на объекте типа NSArray', какую другую настройку я должен сделать? – Realinstomp

+0

'[mapping hasMany: @" images "withMapping: [Отображение изображений]];' это то, что я изменил отображение на – Realinstomp

+0

Странно ... Попробуйте выполнить трассировку журнала RKLogConfigureByName («RestKit/ObjectMapping», RKLogLevelTrace); – Wain

Смежные вопросы