-2

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

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

请问我可以得到一些提示或关键字吗?

ObjWithApi* aObj = [[ObjWithApi alloc]initWithUrl:url];
if(aObj){
    aLabel.text = aObj.title;
}

好的,很多人质疑这个问题..但我现在有自己的答案。这个问题本身就是错误的。我需要的是“填充数据后做一些事情”,这意味着块就足够了。排序像

[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

}];

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

4

1 回答 1

0

你可能想使用AFNetworking或 NSURLConnection

NSURL连接

你的班级必须实现NSURLConnectionDelegateand/or 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.
}
于 2013-03-06T10:02:13.583 回答