2010-07-18 118 views
0

我加载视图控制器按以下格式的所有时间:iPhone - 错误加载视图控制器

-(void)loadSelectUser { 
    MyViewController *nextController = [[MyViewController alloc] initWithStyle:UITableViewStyleGrouped]; 

    MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    [delegate.navigationController pushViewController:nextController animated:YES]; 
    [nextController release]; 
} 

而且我从来没有一个问题这一点。但是现在我正在处理下一个视图无法完全加载的问题。导航栏显示,并调用viewDidLoadnumberOfSectionsInTableView方法。这就对了。该表不显示,它仍然显示前一个视图。

我想这意味着有内存泄漏或没有正确连接的东西。这是正确的道路吗?如果是这样,你最好的建议是什么来调试这个问题。我的代码没有错误消息,所以我不知道从哪里开始。我在不同的控制器中正确加载视图,但由于某种原因,它不会在这个特定的视图*之后执行。

*该视图恰好在下载对象时进行了大量的数据操作,并保存了它们等。但是,它看起来好像都能正常工作。什么会导致导航控制器完全加载下一个视图?

哦,只是把事情弄得更多,有些时候,它正常工作。但是我再运行一次,它不会再执行一次。

更新:TechZen关于推送新视图控制器的正确方法的评论似乎有所帮助。有更高的工作速度,除非我推动tableviewcontroller。根据不同的行为,我的视图会将UITableViewController或UIViewController与一个n​​ib文件一起推送。第二个通常(不总是)的作品。

另外,在另一种视图中,我添加了一个模态视图。但是,当我试图用[self dismissModalViewControllerAnimated:YES];来解雇它时,它并不总是有效。它再一次被击中或错过。任何人都知道什么会导致窗口的过渡非常挑剔?

回答

2

调用应用程序委托来获取导航控制器是不必要的也是有风险的。导航控制器堆栈上的任何视图控制器都有一个填充的navigationController属性,因此您只能使用self.navigationController

调用应用程序委托的导航控制器是有风险的,因为您不能保证您将获得与当前拥有视图控制器调用推送的导航控制器相同的导航控制器。理论上你最终可能会遇到两个重叠和冲突的导航控制器。

将代码切换到self.navigationController并查看是否解决了问题。

+0

哇。我希望我以前知道这件事。但我非常感谢现在了解它。它马上解决了它。谢谢! – RyanJM 2010-07-19 23:58:32

+0

我想我说得太快了。它第一次尝试它,但它不起作用。它仍然随机工作。 – RyanJM 2010-07-20 19:34:15