ios - AFNetworking 能否同步返回数据(在 block 内)?

标签 ios objective-c-blocks synchronous afnetworking

我有一个使用 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/

相关文章:

iphone - 从 Nib 问题加载自定义单元格

ios - 使用 QuincyKit 符号化崩溃锁不符号化

javascript - 通过 async=false 和没有 async 属性的脚本标签加载 javascript 文件的区别

objective-c - Objective C block - 语法

iOS >> block >> 更改 block 外部变量的值

java - 如何在 Java 中同步运行一个进程?

java - 如何从 Java 进行同步\异步 native 调用

ios - 防止 UINavigationBar popViewController 动画

ios - hpple:是否有可能获得像 javascript textContent 这样的文本值

objective-c - 将一个 ActivityIndi​​cator 与两个类一起使用