jlm*_*ini 3 iphone objective-c
我在开发iPhone应用程序库时面临着一个设计决定,我很感激.基本上,我正在为REST API开发一个异步HTTP客户端库.
我的问题是:将解析后的数据从库返回到调用代码的推荐方法是 什么?
同步就是:NSArray*users = [restLibrary getAllUsers]其中getAllUsers被声明为: - (NSArray*)getAllUsers;
或者对于自定义对象User*tom = [restLibrary getUser:@"tom"]如果getUser:声明为: - (User*)getUser:(NSString*)userName;
我对如何干净地异步地做这件事很困惑.
我用同样的问题遇到了这个悬而未决的问题.原始海报找到了解决方案,但他/她不确定是否是推荐的解决方案.
谢谢你的帮助.
乔治
使用异步调用时,等待回调.这基本上意味着你要求一个班级开始做某事,一旦完成它应该执行你选择的方法.
一个很好的例子是Apple自己的NSUrlConnection类.您为此类提供了一个委托.这基本上是NSUrlConnection类将在适当时执行方法的对象.
所以
NSURLRequest * req = [NSURLRequest requestWithURL: self.url];
self.downloadConnection = [NSURLConnection connectionWithRequest: req
delegate: self];
[self.downloadConnection start];
Run Code Online (Sandbox Code Playgroud)
这告诉NSUrlConnection类在self.url获取数据,并且它应该使用当前类作为委托.
委托上有几种方法,在某些情况下称为最常见的方法
- (void) connectionDidFinishLoading: (NSURLConnection *) connection
{
}
Run Code Online (Sandbox Code Playgroud)
对于你的班级,你会做类似的事情.您首先要定义一个@protocol来表示您将使用的接口.在您的示例中,这可能有一个方法
- (void)userFetched:(User *)user
Run Code Online (Sandbox Code Playgroud)
然后使用类似于的方法执行restLibrary
[restLibrary getUser:@"tom" delegate:self]
Run Code Online (Sandbox Code Playgroud)
并且调用类应该实现userFetched方法.
在restLibrary上的getUser方法中,您将执行实际调用以获取数据(最有可能使用NSUrlConnection异步并将返回的数据解析为User对象),然后使用结果调用userFetched.
您需要实现其他方法来处理错误条件等.
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |