推送视图控制器

时间:2016-03-31 10:10:41

标签: ios objective-c uitableview uinavigationcontroller delay

我有标签栏控制器,其中一个标签我有3个容器视图控制器。只有一个可以呈现,其他的被删除。这些控制器的视图在xib中定义。

在其中一个容器中,我有表视图。

当我点击单元格时,我必须按下视图控制器。

我第一次启动应用程序时推送视图控制器时有延迟。在我回到桌面视图并再次推动之后,没有任何延迟。

我在新控制器的didSelectRowAtIndexPathviewDidLoad中打印时间,延迟时间在2到4秒之间。

这是我用来推送视图控制器的代码:

EventDetailsViewController *eventDetailsVc = [[EventDetailsViewController alloc]init];
Events *event = [self.events objectAtIndex:indexPath.row];
eventDetailsVc.curentEvent = event;
NSDateFormatter *f2 = [[NSDateFormatter alloc] init];
[f2 setDateFormat:@"dd MMMM, hh:mm:ss.SSS a"];
NSLog([f2 stringFromDate:[NSDate date]]);

dispatch_async(dispatch_get_main_queue(), ^{
    [self.navigationController pushViewController:eventDetailsVc animated:YES];
});

通常我在推送视图控制器时不使用dispatch_async,但这是我发现的建议解决方案之一。我也试过self.parentViewController.navigationController,结果相同。

我不知道该怎么办这个延迟,有人可以帮助我。

感谢。

1 个答案:

答案 0 :(得分:1)

子视图控制器很可能是这里的问题。确保viewDidLoad / loadView不会启动任何昂贵的操作(例如从Internet下载数据)。

viewDidLoad& loadView仅在第一次显示视图控制器时触发一次。一旦设置了视图属性,这些方法就不会再触发了。

任何内容加载都应该在后台线程上完成(可能使用像AFNetworking这样的库),并且应该(通常)从viewWillAppear或viewDidAppear开始。