JSONModel 返回 nil

2023-12-04

我使用 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 必须采用以下形式:

{“教程”:[{obj1},{obj2},{obj3},...] }

您实际上拥有什么:http://api.matematikfessor.dk/apps/teacher_videos is

[{obj1}、{obj2}、{obj3}]

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

解决方案:

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

1) 在 JSON feed 中引入一个新键 - 即,将 JSON 更改为 {"tutorials": [obj1, obj2, etc...]} 的形式

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

#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);
  }];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSONModel 返回 nil 的相关文章

随机推荐