我試圖在用戶在模態視圖控制器中按下「登錄」後顯示UIAlertView
和UIActivityIndicator
。要登錄,憑證將使用NSURLConnection
類中的sendAsynchronousRequest:queue:completionHandler:
發送到服務器。我的實現如下:UIAlertView,NSURLConnection和wait_fences
UIAlertView * spinner = [[UIAlertView alloc] initWithTitle:@"Connecting to server..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil];
[spinner show];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(spinner.bounds.size.width * 0.5f, spinner.bounds.size.height * 0.5f+5.0f);
[indicator startAnimating];
[spinner addSubview:indicator];
[indicator release];
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * res, NSData * data, NSError * err) {
[spinner dismissWithClickedButtonIndex:0 animated:YES];
[spinner release];
...
}
這似乎很好地工作,如果服務器無法到達或者服務器很慢,但如果服務器回覆立刻,微調似乎並沒有被解僱以後才3-5秒的控制檯記錄
wait_fences: failed to receive reply: 10004003
我想這是因爲我解僱一個模式視圖控制器(登錄屏幕),而UIAlertView
仍呈現,但我不知道爲什麼會這樣,因爲通常應該被解僱。我做錯了什麼,做這件事的正確方法是什麼?
+1不錯的答案。乾杯。 – 2012-07-11 12:37:24
感謝您的快速回復。我會研究didPresentAlertView方法,並接受這個答案,如果這似乎解決它。 – Warkst 2012-07-11 14:11:35
由於我的程序的異步性質,我在另一個問題上解決了這個問題,但問題確實是你所描述的問題:我不得不再等一會兒才能解僱。我現在使用dispatch_after和一個包含我舊解僱代碼的塊,不僅我的程序響應更快,而且UI wait_fences錯誤也消失了!感謝您的解釋。 – Warkst 2012-07-12 09:25:35