2014-08-29 3 views
1

Я использую JSONMODEl (https://github.com/icanzilb/JSONModel) для разбора wordpress JSON FEED (с json-api).JSONModel библиотека/коллекция моделей неправильный

Все идет хорошо, если я хочу «комментариев».

мой корм так:

comments =    (
           { 
        content = "<p>My comment</p>\n"; 
        date = "2014-08-29 20:56:29"; 
        id = 97813; 
        name = johndoe; 
        parent = 0; 
        url = "http://www.google.com"; 
       } 
      ); 

так что я пытаюсь сделать мой "newsmodel" так:

#import "JSONModel.h" 
    #import "commentmodel.h" 

@protocol NewsModel @end 


@interface NewsModel : JSONModel 

@property (strong, nonatomic) NSString* title; 
@property (strong, nonatomic) NSString* content; 
@property (strong, nonatomic) NSString* thumbnail_images; 
@property (strong, nonatomic) NSString* premium; 
@property (strong, nonatomic) NSString* id; 
@property (strong, nonatomic) CommentModel* comments; 
@end 

и мой commentmodel подобное

#import "JSONModel.h" 
@interface CommentModel : JSONModel 

@property (assign, nonatomic) int id; 
@property (strong, nonatomic) NSString* name; 
@property (assign, nonatomic) NSString* content; 
@end 

Но когда Я пытаюсь создать свое приложение, мой «фид» пуст.

если я закомментировать «комментарий» часть модели новостей, я получил содержание ....

Я думаю, что я застрял где-то, но где! Если кто-то пр идею :)

Большое спасибо

ответ

3

comments является массивом, ни один комментарий, обратите внимание на верхний уровень ( и ), обозначающие массив в NSDictionaryNSLog(). Внутри элемента массива обозначены { и }.

Но NewsModel имеет comments, определенный как отдельный комментарий (CommentModel), а не массив. его следует, вероятно, объявить:

В документах см. Model collections и как обрабатывается products.

Вам нужно будет объявить , см. Пример в верхней части примеров «Коллекции моделей».

@protocol CommentModel 
@end 

Выше:

@interface CommentModel : JSONModel 
@property (strong, nonatomic) NSArray<CommentModel>* comments; 
+0

Я стараюсь, но у меня есть «заявление не удается найти протокол для„NewsModel“» ошибка ... И в док, там insn't любой протокол для заказаModel. Спасибо – Mitchum

2
@protocol CommentModel 
@end 

@interface CommentModel : JSONModel 
@property (assign, nonatomic) int id; 
@property (strong, nonatomic) NSString* name; 
@property (assign, nonatomic) NSString* content; 
@end 

@interface NewsModel : JSONModel 
@property (strong, nonatomic) NSString* title; 
@property (strong, nonatomic) NSString* content; 
@property (strong, nonatomic) NSString* thumbnail_images; 
@property (strong, nonatomic) NSString* premium; 
@property (strong, nonatomic) NSString* id; //int? 
@property (strong, nonatomic) NSArray<CommentModel>* comments; 
@end 
+0

'id' может быть строкой,' NSLog() 'из' NSDictionaly' не вставляет все строки в кавычки. – zaph

0

Спасибо, получил его строить, но теперь если я пытаюсь Alloc его

@try { 
     _feed = [[NewsFeed alloc] initWithDictionary:obj error:nil]; 

    } 
    @catch (NSException *e) { 
     NSLog(@"Parse error : %@ reason %@", [e name], [e reason]); 
    } 

Я получил нехорошее свойство декларации протокола причина не допускается протокол свойств JSONModel, а не класс JSONModel.

моя лента новостей, как этот

@interface NewsFeed : JSONModel 
@property (nonatomic, strong) NSArray <NewsModel> *posts; 
@end 

И работать как шарм без «комментария» части ...

Благодаря

0

В дополнение к указанным выше ответов, так как я не могу добавить комментарий еще, все, что вам нужно сделать, это добавить пустой протокол с таким же именем, как это:

@protocol CommentModel 
@end 

Затем, как указано здесь JsonModel documentation, обозначение будет отличаться от обозначений. Первый - это объявление протокола, необходимое для работы JsonModel, другое - декларация помощника компилятора objc. Вы можете комбинировать их, как указано в том же примере:

@property (nonatomic) NSArray<ProductModel *> <ProductModel> *products;