在完成例程中
[NSURLConnection sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
我打电话
dispatch_async(dispatch_get_main_queue(), ^
{
NSLog(@"CALLING SUCCESS");
});
我有两个测试应用程序,一个可以正常工作,另一个不能。发生的情况是日志语句不执行。队列是用
queue = [[NSOperationQueue alloc] init];
让我发疯,它根本拒绝执行。在这两种情况下,我都在应用程序启动期间调用了它。我尝试将通话延迟 5 秒。无论我做什么,它都不会在一个应用程序中执行该块,而是在另一个应用程序中执行。如果我对在什么情况下 dispatch_async(dispatch_get_main_queue()... 可能会失败有一些线索,我也许能够辨别出差异。
请注意,在实际代码中,我正在调用一个我想在主线程上执行的块。我将测试用例简化为只调用 NSLog。
更新:不同之处在于此代码不适用于 iOS 5.1 模拟器,但适用于 6.0 或 6.1。为什么?
更新2:好的,如果我使用默认的 NSURLConnection 它确实有效,但如果我使用
self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
[self.connection setDelegateQueue:queue];
[self.connection start];
它在 iOS 5.1 中不起作用。开始认为这可能是 5.1 中带有 setDelegateQueue 的错误。