Ios 连续显示多个警报视图:仅显示最后一个警报视图

Ios 连续显示多个警报视图:仅显示最后一个警报视图,ios,objective-c,Ios,Objective C,我用一个非常简单的设置更新了这个问题 在appdelegate.h/m中 @property() UIAlertView *dialog; -(void) showDialog:(NSString *)message { if (!dialog) { dialog=[[UIAlertView alloc] initWithTitle:xx]; } [dialog performSelectorOnMainThread:@selector(show) withObj

我用一个非常简单的设置更新了这个问题

在appdelegate.h/m中

@property() UIAlertView *dialog;

-(void) showDialog:(NSString *)message {
   if (!dialog) {
      dialog=[[UIAlertView alloc] initWithTitle:xx];
   }
   [dialog performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
}

-(void) dismissDialog {
  if(dialog) {
    [dialog dismissWithClickedbuttonIndex:0 animated:YES];
    dialog=nil;
  }
}
在viewcontroller.m中

点击按钮

-(IBAction) clicked:(id)sender {

dispatch_async(dispatch_get_main_queue(), ^{
  AppDelegate *_app = xxx;
  [_app showDialog:@"start1"];
  sleep(10);
  [_app dismissSyncDialog];

  [_app showSyncDialog:@"start2"];
  sleep(10);
  [_app dismissSyncDialog];

  [_app showSyncDialog:@"start3"];
  sleep(10);
  [_app dismissSyncDialog];
});
}
很长一段时间后,只有最后一个“start3”才会出现

该行为看起来像主线程已冻结,因此“start3”仅在线程完成后出现


有没有办法解决这个问题?谢谢。

移动[\u应用程序显示同步对话框:@“开始”];内部调度异步。。。。如果alertview出现在除main之外的任何其他线程上,它将导致UI挂起

使用此代码获取主线程

double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    // some stuff 1

    [self dismissSyncDialog];
    [self showSyncDialog:@"start2"];

    // some other stuff 2

    [self dismissSyncDialog];
    [self showSyncDialog:@"start3"];

    // some other stuff 3

    [self dismissSyncDialog];
});

showSyncDialog的第一次调用是在主线程或后台线程中执行的?它在主线程中。它将毫无问题地显示。这将导致“开始”也消失。只有“start3”将显示。