2013-09-19 5 views
1

Я использую JSONModel, чтобы получить JSON из URL. Это очень простой объект, содержащий только 2 строки - «имя» и «url».JSONModel возвращает nil

Сначала я сделал модель объекта:

@protocol 
Tutorial 
@end 
@interface Tutorial : JSONModel 
@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) NSString *url; 
@end 

Затем Object Feed:

#import "JSONModel.h" 
#import "Tutorial.h" 
@interface TutorialFeed : JSONModel 
@property (nonatomic, strong) NSArray <Tutorial> *tutorials; 
@end 

, а затем в MasterViewController.m:

#import "MasterViewController.h" 
#import "DetailViewController.h" 
#import "TutorialFeed.h" 
#import "JSONModelLib.h" 

@interface MasterViewController() { 
    TutorialFeed *feed; 
    TutorialFeed *testFeed; 
} 
@end 
@implementation MasterViewController 
-(void)viewDidAppear:(BOOL)animated 
{ 
    feed = [[TutorialFeed alloc] 

initFromURLWithString:@"http://api.matematikfessor.dk/apps/teacher_videos" 
     completion:^(JSONModel *model, JSONModelError *err) { 
      NSLog(@"Tutorials %@", feed.tutorials); 
     }]; 
} 
@end 

Проблема заключается в том, я получаю возвращенную nil в моем журнале :( Я не уверен, почему это происходит, потому что мне удалось получить данные из JSON с этого URL: Kiwa URL

Все, что сделано, после этого tutorial

Я не уверен, что я делаю неправильно. У кого-нибудь есть ключ?

+1

Там НИКАКИЕ учебников не приемят в этом ответ JSON. Вы это проверили? –

+0

Ребята, я новый с развитием OBJ-C. во-первых, я не уверен, что вы имеете в виду: «В этом ответе JSON нет объекта учебников». Во-вторых, что вы имеете в виду с «проверкой и сообщением об ошибке ошибки err» Возможно, я задал себе немые вопросы сейчас, но через годы в Android трудно переключиться на obj-c. По крайней мере для меня. – SteBra

+0

Переменная ERROR говорит: 2013-09-19 11: 30: 16.024 EduLabTutorial [48084: c07] Учебники Ошибка домена = JSONModelErrorDomain Code = 1 "Неверные данные JSON.Malformed JSON, неверный ответ сервера или другая причина для недопустимого ввода в класс JSONModel. UserInfo = 0x8060550 {NSLocalizedDescription = Недопустимые данные JSON. Неверный формат JSON, неверный ответ сервера или другая причина для недопустимого ввода в класс JSONModel.} – SteBra

ответ

6

Объяснение:

Прежде всего JSONModel ожидает ваш JSON верхнего объекта быть словарем, только таким образом он может соотносить свои ключи к свойствам модели.

Ваша модель называется TutorialFeed ожидает подаваться JSON, совпадающий с именем свойства «учебники» .Это означает, что ваш фид JSON должен быть в форме:

{ "tutorials": [{obj1}, {obj2}, {obj3}, ...] }

То, что вы на самом деле на: http://api.matematikfessor.dk/apps/teacher_videos является

[{obj1}, {obj2}, {obj3}]

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

Решение:

Если у вас есть массив в верхней части корма JSON (например, один на URL вы используете) у вас есть два варианта:

1) ввести новый ключ ваш JSON-канал, т. е. измените JSON в виде {"tutorials": [obj1, obj2 и т. д.]}

2) Вы можете использовать другой метод для анализа канала JSON. Посмотрите на docs here и использовать статический метод, который анализирует список объектов:

#import "JSONModel+networking.h" 
... 
[JSONHTTPClient 
    getJSONFromURLWithString:@"http://api.matematikfessor.dk/apps/teacher_videos" 
    completion:^(id feed, JSONModelError *err) { 
    NSArray* tutorials = [Tutorial arrayOfModelsFromDictionaries: feed]; 
    NSLog(@"tutorials: %@", tutorials); 
    }]; 
+1

Этот метод может использоваться, если я возвращаю один результат, кар? Это возвращает несколько учебников? Я работаю с объектом JSON, который возвращает 1 набор данных внутри, содержит несколько объектов и объект массивов. – Coughlin

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