我按以下格式一直加载视图控制器:
-(void)loadSelectUser {
MyViewController *nextController = [[MyViewController alloc] initWithStyle:UITableViewStyleGrouped];
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navigationController pushViewController:nextController animated:YES];
[nextController release];
}
我从来没有遇到过这个问题。但是现在我正在处理下一个视图没有完全加载的问题。导航栏显示,并且viewDidLoad
和numberOfSectionsInTableView
方法都被调用。这就对了。该表未显示,它仍显示上一个视图。
我想这意味着存在内存泄漏或未正确连接的情况。这是正确的寻找道路吗?如果是这样,那么调试此问题的最佳建议是什么?我的代码没有错误消息,所以我不知道从哪里开始。我在不同的控制器中正确加载视图,但由于某种原因,在此特定视图之后它不会执行此操作*。
*这个视图恰好通过下载对象,保存它们等来进行大量数据操作。但同样,它看起来一切正常。什么会让导航控制器完全加载下一个视图?
哦,只是为了把事情搞得更多,有时候它会正常运作。但是我再次运行它并且不会再次运行它。
更新:TechZen关于推送新视图控制器的正确方法的评论似乎有点帮助。除非我正在推动tableviewcontroller,否则它的工作速率会更高。根据操作,我的视图将使用nib文件推送UITableViewController或UIViewController。第二种通常(并不总是)有效。
另外,在另一个视图中我添加了一个模态视图。但是当我尝试使用[self dismissModalViewControllerAnimated:YES];
解雇它时,它并不总是有效。它再一次被击中或错过。任何人都知道导致窗户过渡的原因是什么?
答案 0 :(得分:2)
调用应用程序代理来获取导航控制器是不必要且有风险的。导航控制器堆栈上的任何视图控制器都具有填充的navigationController
属性,因此您只需使用self.navigationController
。
调用app delegate的导航控制器是有风险的,因为您无法保证您将获得与当前持有视图控制器调用推送的导航控制器相同的导航控制器。从理论上讲,你可以得到两个重叠和冲突的导航控制器。
将代码切换为self.navigationController
,看看是否能解决问题。