在开发一个iPhone应用程序库时,我将面临一个设计决策,对此我希望得到反馈。基本上,我正在为REST开发一个异步HTTP客户机库。
我的问题是:,将解析的数据从库返回到调用代码的推荐方法是什么?
同步只需: NSArray *user= restLibrary getAllUsers,其中getAllUsers声明为:- (NSArray *)getAllUsers;
或者对于自定义对象User *tom = restLibrary getUser:@"tom“,如果getUser:声明为:- (User *)getUser:(NSString *)userName;
我对如何异步地干净地完成它感到困惑。
我碰到这个unanswered question时也有同样的问题。最初的海报找到了一个解决方案,但他/她不确定是否是推荐的解决方案。
谢谢你的帮助。
豪尔赫
发布于 2011-05-05 15:40:16
在使用异步调用时,您需要等待回调。这基本上意味着您要求一个类开始做一些事情,当它完成时,它应该执行您选择的方法。
这方面的一个很好的例子是苹果自己的NSUrlConnection类。您为该类提供了一个委托。这基本上是一个对象,NSUrlConnection类将酌情对其执行方法。
所以
NSURLRequest * req = [NSURLRequest requestWithURL: self.url];
self.downloadConnection = [NSURLConnection connectionWithRequest: req
delegate: self];
[self.downloadConnection start];这告诉NSUrlConnection类在self.url中获取数据,并且它应该使用当前类作为委托。
关于委托有几种方法,在某些情况下调用,其中最常见的方法可能是
- (void) connectionDidFinishLoading: (NSURLConnection *) connection
{
}在你的班上,你也会做类似的事情。首先定义一个@协议来表示要使用的接口。在您的示例中,这可能有一种方法,如
- (void)userFetched:(User *)user然后使用类似于
[restLibrary getUser:@"tom" delegate:self]调用类应该实现userFetched方法。
在getUser方法中,您可以执行实际的调用来获取数据(很可能是以异步方式使用NSUrlConnection,并将返回的数据解析为用户对象),然后用结果调用userFetched。
您需要实现其他方法来处理错误条件等等。
这个有用吗?
发布于 2011-05-05 15:44:18
除非你有自己的要求..。我只会使用开源的lib ASIHTTP。
http://allseeing-i.com/ASIHTTPRequest/
它非常坚固。
https://stackoverflow.com/questions/5900359
复制相似问题