我想基于来自网络的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
}];
如果有人读过这篇文章,请尝试将您的想法转换为合理的方式,然后找出自己的答案。
答案 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.
}