我有
[self presentViewController:viewController animated:YES completion:^{}];
在我第一次单击按钮后5-6秒后显示控制器。在第一次介绍后者工作正常。
什么似乎是问题?
由于
答案 0 :(得分:1)
我猜有一些网址下载过程已经在ViewController
viewDidLoad
方法中启动,最终会在下载完成之前阻塞。虽然它可以很好地工作,但由于缓存,它的下载速度比第一次快。
我建议您使用dispatch block
,如下所示
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//Download Code
[self download];
});
或者,你可以创建一个函数说
-(void)download{
}
并使用
调用它[self performSelector:@selector(download) withObject:nil afterDelay:.1];
全部在 viewDidLoad
。
一切都会毫无问题地运作。
您也可以选择添加UIActivityIndicator
来向用户展示要下载的活动。
希望它有所帮助。
干杯。
答案 1 :(得分:0)
不仅@rckoenes说的awakeFromNib
问题,而且检查viewDidLoad
presentingViewController
中的任何重负载进程,因为这些进程将在主线程上运行。重载过程可能是
1.下载图像并将其固定到图像,
2.绘制任何高清晰度图像,
3.从互联网下载数据(例如:[NSData dataWithContentsOfURL:url]
)等。
使用线程可以避免这种情况。
如果不是这种情况,请告诉我您希望在viewDidLoad
的{{1}}中运行的流程是什么。
答案 2 :(得分:0)
您确定主线程上发生了这种情况吗? 您可以确认如下:
if(! [NSThread isMainThread] )
{
dispatch_async( dispatch_get_main_queue(),
^{
// Continue here
} );
}