UIViewController没有立即出现

时间:2014-07-14 09:52:53

标签: ios objective-c

我有

[self presentViewController:viewController animated:YES completion:^{}];

在我第一次单击按钮后5-6秒后显示控制器。在第一次介绍后者工作正常。

什么似乎是问题?

由于

3 个答案:

答案 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
    } );
}