【问题标题】:AFNetworking completion block not called?未调用 AFNetworking 完成块?
【发布时间】:2015-07-01 03:17:37
【问题描述】:

我这里有一段代码,它基本上调用了我的 servlet(它确实如此),然后返回结果。但是,如果我在(参考if(isSync))中添加了同步/阻塞部分,则不会调用完成块并且整个应用程序会挂在dispatch_group_wait 中。如果有任何区别,则从主线程调用此代码。

// ...More code here


if(isSync)
{
    dispatch_group_enter(group);
}

AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:REQ];
op.responseSerializer = [AFJSONResponseSerializer serializer];

[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSDictionary *result = responseObject;
    NSLog(@"JSON responseObject: %@ ", result);
    if(isSync)
    {
        dispatch_group_leave(group);
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", [error localizedDescription]);
    if(isSync)
    {
        dispatch_group_leave(group);
    }
}];
[op start];
if(isSync)
{
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
}

我错过了什么吗?

【问题讨论】:

  • 这是一个愚蠢的错误,在一段时间后我发现了问题-.-。我根本没有使用异步组 x.x

标签: objective-c ios8 afnetworking objective-c-blocks afnetworking-2


【解决方案1】:

我遇到了完全相同的问题,我花了一段时间才意识到该操作在特定队列(默认队列)中运行块。

也就是说,假设您在同一个队列中运行代码,如果您使用 dispatch_group_wait 阻止/停止正在运行的代码,则成功和失败块将永远不会运行。要解决此问题,您可以将完成队列和组添加到操作中,使操作在不同的队列中运行块。下面的代码是swift,不知道在objective-c中是不是一样。

 operation.completionQueue = queue;
 operation.completionGroup = postGroup;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2012-06-18
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多