Ios 连续显示多个警报视图:仅显示最后一个警报视图
我用一个非常简单的设置更新了这个问题 在appdelegate.h/m中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
@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”将显示。