Obj-C,带有控制器控制器的导航控制器我使用不正确吗?

时间:2011-11-11 09:04:01

标签: objective-c xcode cocoa-touch uinavigationcontroller

当我第一次设置我的应用程序时,我遇到了一些问题,让单个导航控制器工作。

每个标签项后面都有几个屏幕。我认为我遇到的问题是视图控制器会在错误的选项卡中显示,在它们之间切换时。我并不担心在每个标签中保持最后一个视图控制器的打开状态,实际上我隐藏了标签栏以暂时停止此操作。

所以目前我的每个标签都有导航控制器文件。我把它们分配到IB,在主窗口。

我就这样使用它们......

CategorySelTableViewController *nextController = 
          [[[CategorySelTableViewController alloc] initWithNibName:
          @"CategorySelTableView" bundle:nil] autorelease];
nextController.hidesBottomBarWhenPushed = YES;

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] 
         delegate];

[delegate.billsndepsNavController pushViewController:nextController animated:YES];

但是,我有一些泄密。

我无法释放我的委托,导致错误。

我的同事建议我应该使用self.navigationcontroller

但这对我来说是一个很大的改变,我想在做出改变之前确定性地知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

当视图控制器被推入堆栈时,它有两种方法来访问导航控制器:

  • 使用self.navigationController
  • 在代表中访问导航控制器ivar:
    [UIApplication sharedApplication].delegate.navigationController

两者都是等价的,但第一个更短,所以它往往会被更多地使用。从一个切换到另一个没有任何好处。进行额外输入的唯一原因是当您不在推送视图控制器中时,例如:在独立GUI组件中使用的视图控制器,或者不是视图控制器的对象。

代理不应该被释放,因为它在应用程序的整个生命周期中都存在。