我正在尝试获取JSON对象。我有一个这样做的模型,然后我有另一个UIViewController,我想在那里显示该信息。
当我构建我的代码时,我没有看到任何与我的模型相关的NSLog触发数据。如何将其扩展到显示信息的其他视图?我是否创建了一个方法,然后在说`viewDidLoad
上调用该方法?
我的实现文件中有以下代码
#import "JSONModel/JSONModelLib.h"
#import "FetchTideData.h"
@implementation FetchTideData
-(void)getJSON {
NSString *locationQueryURL = @"http://api.wunderground.com/api/xxxx/tide/geolookup/q/43.5263,-70.4975.json";
[JSONHTTPClient getJSONFromURLWithString:locationQueryURL
completion:^(NSDictionary *json, JSONModelError *err) {
NSLog(@"Got JSON from web: %@", json);
}];
}
@end
有什么想法吗?从本质上讲,我希望这个模型能够完成所有数据工作,然后将其传递给我的其他视图
修改 的
以下是我要返回的数据示例 - https://gist.github.com/ryancoughlin/8043604
我想要拉8-10件,我会假设我会为每个项目创建各种对象,因为它们是嵌套的,而不是单个对象?
谢谢,
赖安
答案 0 :(得分:0)
这是代表们的目的。 FetchTideData类应该使用将数据传递给其委托的方法来定义委托协议。应该在fetch的完成块中调用该方法。要使用此数据的视图控制器应该为此类的实例分配int,并将其自身设置为委托。
在FetchTideData.h文件中你会有这样的东西:
@protocol DownloadHelperDelegate <NSObject>
-(void)fetchDidFinishWithResult:(id) result;
@end
@interface FetchTideData : NSObject
@property (weak,nonatomic) id <DownloadHelperDelegate> delegate;
然后,在你的getJSON方法中,你将添加一行来调用委托方法:
-(void)getJSON {
NSString *locationQueryURL = @"http://api.wunderground.com/api/xxxx/tide/geolookup/q/43.5263,-70.4975.json";
[JSONHTTPClient getJSONFromURLWithString:locationQueryURL
completion:^(NSDictionary *json, JSONModelError *err) {
NSLog(@"Got JSON from web: %@", json);
[self.delegate fetchDidFinishWithResult:json];
}];
}
在视图控制器的viewDidLoad方法中(假设您想立即开始提取),您将实例化FetchTideData的实例,将自己设置为委托,并调用getJSON:
-(void)viewDidLoad {
FetchTideData *fetcher = [FetchTideData new];
fetcher.delegate = self;
[fetcher getJSON];
}
最后,您将实现委托方法,该方法将在完成其提取时由fetcher调用:
-(void)fetchDidFinishWithResult:(id) result {
// do whatever you want here with the result
}