我有一个使用 AFJSONRequestOperation 的函数,我希望仅在成功后返回结果。你能指出我正确的方向吗?我对 block 和 AFNetworking 仍然一无所知。
-(id)someFunction{
__block id data;
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json){
data = json;
return data; // won't work
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation: operation];
return data; // will return nil since the block doesn't "lock" the app.
}
最佳答案
要在操作完成之前阻止主线程的执行,您可以在将其添加到操作队列后执行[operation waitUntilFinished]
。在这种情况下,您不需要 block 中的 return
;设置 __block
变量就足够了。
也就是说,我强烈反对将异步操作强制用于同步方法。有时很难动脑筋,但如果有任何方法可以将其构造为异步的,那几乎肯定是可行的方法。
关于ios - AFNetworking 能否同步返回数据(在 block 内)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7969865/