如何使用基于异步数据的对象?

时间:2013-03-06 09:52:08

标签: ios objective-c asynchronous

我想基于来自网络的NSData初始化一个对象。

我可以基于异步数据构建对象,但我想知道如何等到它完成并继续下一个命令。

我可以获得一些提示或关键字吗?

ObjWithApi* aObj = [[ObjWithApi alloc]initWithUrl:url];
if(aObj){
    aLabel.text = aObj.title;
}
好的,很多人质疑这个问题......但我现在有了自己的答案。 这个问题本身就是错误的。 我需要的是“在填充数据后做一些事情”,这意味着Block就足够了。 排序如

[obj getData:^(NSArray* data) {
   make data object by data.
}

并反思这个问题,它会像

@interface someRemoteDataModel 
@implement someRemoteDataModel 
+(void)getData:(NSURL*)url andDoSomething:(void(^)(NSArray* data))block {
    block(data);
}
@end

然后

[someRemoteDataModel getData:aURL andDoSomething:(^ NSArray *data){
  // fill data object and update UI

}];

如果有人读过这篇文章,请尝试将您的想法转换为合理的方式,然后找出自己的答案。

1 个答案:

答案 0 :(得分:0)

您可能想要使用AFNetworking或NSURLConnection

<强> NSURLConnection的

您的课程必须实施NSURLConnectionDelegate和/或NSURLConnectionDataDelegate;

请求发送

// Create the POST request to the server.
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"url"];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];

* 此数据接收*

#pragma mark - NSURLConnectionDataDelegate method/s
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    _myData = [data copy];
    // at this moment you can freely access `_myData` but remember to release it when it is needed
}

#pragma mark - NSURLConnectionDelegate method/s
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
{
    // this method will be called if the url connection failed.
}