Objective-C-JSONModel返回nil

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

首先,我创建了对象模型:

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

然后是对象供稿:

#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 🙁
我不确定为什么会这样,因为我设法从URL的JSON中获取数据:
Kiwa URL

完成所有操作,继此tutorial

我不确定我在做什么错.
有人有任何线索吗?

最佳答案
说明:

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

名为TutorialFeed的模型希望接收与属性名称“ tutorials”匹配的JSON.这意味着您的JSON feed必须采用以下形式:

{ “tutorials”: [{obj1}, {obj2}, {obj3}, …] }

实际上,您拥有的是:http://api.matematikfessor.dk/apps/teacher_videos

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

这就是您的模型实例实际上为“ nil”的原因,因为JSON结构与您的模型期望的不匹配.

解:

如果您在JSON供稿的顶部有一个数组(例如您使用的URL上的数组),则有两个选择:

1)在您的JSON供稿中引入一个新密钥-即,将JSON更改为{“ tutorials”:[obj1,obj2等…]}的形式

2)您可以使用另一种方法来解析JSON feed.查找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);
  }];

转载注明原文:Objective-C-JSONModel返回nil - 代码日志