【问题标题】:JSONModel returns nilJSONModel 返回零
【发布时间】:2013-09-19 09:18:47
【问题描述】:

我正在使用 JSONModel 从 URL 中获取 JSON。 这是一个非常简单的对象,只包含两个字符串——“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之后

我不确定我做错了什么。 有人知道吗?

【问题讨论】:

  • 该 JSON 响应中没有教程对象。你检查了吗?
  • 伙计们,我是 obj-c 开发的新手。首先,我不确定“JSON 响应中没有教程对象”是什么意思。第二,“检查并报告错误变量err”是什么意思我现在可能问了一个愚蠢的问题,但是在Android多年之后,很难切换到obj-c。至少对我来说。
  • 错误变量说:2013-09-19 11:30:16.024 EduLabTutorial[48084:c07] 教程错误域=JSONModelErrorDomain Code=1“无效的 JSON 数据。格式错误的 JSON,服务器响应无效或其他原因对于 JSONModel 类的无效输入。” UserInfo=0x8060550 {NSLocalizedDescription=无效的 JSON 数据。 JSON 格式错误、服务器响应无效或 JSONModel 类输入无效的其他原因。}
  • 对不起,我对那个教程对象的想法有误。
  • 是的,但很奇怪,你是怎么想出 "{"error":true,"loggedin":false,"data":null}" 因为我在输入时得到了一个正确的 JSON在浏览器的网址中

标签: objective-c json nsarray jsonmodel


【解决方案1】:

说明:

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

您的名为 TutorialFeed 的模型需要与属性名称“tutorials”匹配的 JSON。这意味着您的 JSON 提要必须采用以下形式:

{ "教程": [{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 提要。查找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);
  }];

【讨论】:

  • 如果我返回单个结果,可以使用此方法,对吗?这是返回多个教程?我正在使用一个 JSON 对象,该对象返回一组数据,其中包含多个对象和一个数组对象。
猜你喜欢
  • 2021-09-23
  • 2016-11-24
  • 2021-10-24
  • 2017-11-19
  • 2015-01-23
  • 2016-11-24
  • 2013-12-04
  • 2010-12-31
  • 2012-06-05
相关资源
最近更新 更多