2013-02-14 5 views
4

У меня есть проблема в чтении JSON с помощью JSONModel libraryJSONModel Декларация о запрещении служебной информации?

{"images":[{"id":1,"name":"name1","img":"3423","note":"note1"},{"id":2,"name":"name2","img":"rew","note":"note2"},{"id":3,"name":"name3","img":"dsfs","note":"note3"},{"id":4,"name":"name4","img":"cxvxc","note":"note4"},{"id":5,"name":"name5","img":"erwe","note":"note5"}]} 

модель класса

#import "JSONModel.h" 

@protocol ImagesModel @end 

@interface ImagesModel : JSONModel 
@property int id; 
@property (strong, nonatomic) NSString* name; 
@property (strong, nonatomic) UIImage* img; 
@property (strong, nonatomic) NSString* note; 
@end 

и я получил эту ошибку

Terminating app due to uncaught exception 'Bad property protocol declaration', reason: '<ImagesModel> is not allowed JSONModel property protocol, and not a JSONModel class.' 

Любая помощь, пожалуйста?

ответ

4

Я вижу две проблемы с кодом вставленной в

Ваша модель хороша, но она является моделью для одного элемента - т. Е. это модель, которую вы собираетесь использовать для загрузки одного изображения - не все изображения одновременно. Поэтому вам нужна модель, чтобы описать, что у вас есть коллекция изображений, и другая модель (та, которая у вас есть) для описания каждого из объектов изображения.

Вторая проблема заключается в том, что одним из ваших свойств является объект UIImage, но вы передаете строку в свой канал JSON.

Поэтому, чтобы ваш пример работы вам нужно:

#import "JSONModel.h" 

//define the single image object protocol 
@protocol ImageModel @end 

//define the single image model 
@interface ImageModel : JSONModel 
@property int id; 
@property (strong, nonatomic) NSString* name; 
@property (strong, nonatomic) NSString* img; 
@property (strong, nonatomic) NSString* note; 
@end 

@implementation ImageModel 
@end 

//define the top-level model for the collection of images 
@interface Images : JSONModel 
@property (strong, nonatomic) NSArray<ImageModel>* images; 
@end 

, а затем прочитать вашу строку JSON и создать модель изображения:

NSError* err = nil; 
Images* imagesCollection = [[Images alloc] initWithString:JSONstring error:&err]; 

Тогда каждую из элементов imagesCollection.images будет a ImageModel экземпляр.

Voila!

+0

Когда мы делаем «initWithDictionary», а ответ Json имеет массив словаря, он возвращает JSONModelError «Попытка инициализировать объект JSONModel с помощью initWithDictionary: error: но параметр словаря не был« NSDictionary »в модели initWithDictionary. –