我想在后台使用success
块。我使用代码:
[manager POST:URLString parameters:params success:^(AFHTTPRequestOperation *responseHeader, id responseBody) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
[self parseResponse:responseHeader and:responseBody forRequest:request];
});
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"FAIL request: %@", error);
}];
在
[self parseResponse:responseHeader and:responseBody forRequest:request];
我发送NSNotification
来更新用户界面。但它不起作用......为什么?
答案 0 :(得分:4)
当您发布通知时,同步发送通知,因此您需要切换回主线程,最好在发布之前(尽管您可以在收到回调后切换)。
您可以使用dispatch_async
或performSelector:onMainThread:
切换到主线程。
答案 1 :(得分:0)
必须在主线程上运行UI操作。 在后台线程上执行时 - 您将在调试器中收到有关此问题的警告,并且更新将在几秒钟后发生(当UI线程实际上将进行调用时)。 这就是为什么你必须使用dispatch_async与主线程弹回到主线程并在该线程上执行所有UI操作。
请注意 - 在AFNetworking中 - 无论如何都会在另一个线程上发生异步加载操作,并且完成块在它们退出的同一队列中返回 - 所以理论上 - 如果你所做的只是更新UI - 那么你就不应该也不会在你的代码中处理它。