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
完成所有这些,遵循本教程
我不知道我做错了什么.有人有任何线索吗?
说明:
首先,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)