JSONModel返回nil

Ste*_*Bra 2 json objective-c nsarray jsonmodel

我正在使用JSONModel从URL获取JSON.这是一个非常简单的对象,只包含2个字符串 - "name"和"url".

首先我制作了对象模型:

@protocol
Tutorial
@end
@interface Tutorial : JSONModel
@property (nonatomic, strong)   NSString *name;
@property (nonatomic, strong)   NSString *url;
@end
Run Code Online (Sandbox Code Playgroud)

然后对象Feed:

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

然后在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
Run Code Online (Sandbox Code Playgroud)

问题是,我在日志中返回nil :(我不知道为什么会发生这种情况,因为我设法从这个URL获取JSON数据: Kiwa URL

完成所有这些,遵循本教程

我不知道我做错了什么.有人有任何线索吗?

Mar*_*rov 6

说明:

首先,JSONModel期望您的JSON顶级对象是一个字典,只有这样才能将其键与模型的属性相匹配.

你的模型名为TutorialFeed,希望得到与属性名称"tutorials"相匹配的JSON.这意味着你的JSON提要必须采用以下形式:

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

你有什么事实:http://api.matematikfessor.dk/apps/teacher_videos

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

这就是为什么你的模型实例实际上是"nil"的原因,因为JSON结构与你的模型所期望的不匹配.

解:

如果您的JSON源顶部有一个数组(就像您使用的URL上的数组),您有两个选择:

1)在您的JSON提要中引入一个新密钥 - 即将JSON改为{"tutorials"形式:[obj1,obj2,etc ...]}

2)您可以使用另一种方法来解析JSON提要.在这里查找文档并使用解析对象列表的静态方法:

#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);
  }];
Run Code Online (Sandbox Code Playgroud)