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
ひょっとしてここに答えがあるでは。