DispatchQueue内でNSRunLoop.Current.RunUntilを呼び出すコードが動かなくなってしまった その2
前回の記事の動かなくなったコードをObjective-Cで記述してみた。Xcodeはv5.0.2を使用。
bool alertFinished; - (void)hoge1:(id)sender { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ dispatch_sync(dispatch_get_main_queue(), ^{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Test" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; [alert show]; alertFinished = NO; while (alertFinished == NO) { [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5f]]; } }); }); } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { alertFinished = YES; }
結果、嫌な予感はしていたがXamarin.iOSと同じ症状に。
仕様が変わったんだろうか。原因は分かったけど対処方法が全く不明。困った。
追記 2014/02/10 18:19
ひょっとしてここに答えがあるでは。