记录今天开发使用MBProgressHUD遇到的一个小坑:
在push到下一个界面前做了一些耗时操作,结果用[MBProgressHUD show]时show不出来,到下一个界面才会出现转圈。
- (void)showHUD{
[MBProgressHUD show];
}
pragma mark - 下一步
先记录一下错误的写法
- (void)nextStepClcik
{
//dispatch_async(dispatch_get_main_queue(), ^{
// [MBProgressHUD show];
//});//这样不管用
[self performSelectorInBackground:@selector(showHUD) withObject:nil];
for (int i=0; i<100000; i++) {
//耗时操作
}
[MBProgressHUD hideHUD];
NextController *next= [[NextController alloc]init];
[self.navigationController pushViewController: next animated:YES];
}
这样写进入下个界面载返回上一个界面时崩溃报错:
This application is modifying the autolayout engine from a background
thread, which can lead to engine corruption and weird crashes. This
will cause an exception in a future release.
此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃。 这将导致在将来版本中的异常。
最后用GCD解决的:
[self showHUD];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
for (int i=0; i<100000; i++) {
//耗时操作
}
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUD];
NextController *next= [[NextController alloc]init];
[self.navigationController pushViewController: next animated:YES];
});
});
参考:http://blog.csdn.net/tzshlyt/article/details/51880484
网友评论