为什么当我根据存储状态自动跳转到该视图时,工具栏项目不会出现?

时间:2011-04-16 11:46:48

标签: iphone ios uiviewcontroller uitoolbar

我试图理解为什么当我在启动后自动跳转到第二个视图(使用UINavigationController)并查看存储状态时,工具栏项目没有出现?

当我返回主页面(通过UINavigationController标准安排),然后在UITableView中选择行,然后再次返回到同一视图,工具栏项目显示正常。

代码提取给出了粗略的想法:

mainController - 基于正常选择的条目

  • 通过“didSelectRowAtIndexPath”
  • 创建新的视图控制器并将(pushViewController)推送到堆栈

mainController - 重新启动时&检查以前的状态用户是否在第二层视图中

  • 在viewDidLoad方法的底部检查上一个视图的状态
  • 如果需要按照上面的正常选择方法按照相同的方法自动跳转到第二层视图 - 实际上我重构了两个代码,以便为此使用相同的方法/代码

第二层视图

  • 在ViewDidLoad中设置工具栏 - 此方法中的代码

代码:

- (void)setupToolbar {
    [self.navigationController setToolbarHidden:NO];
    UIBarButtonItem *increaseFontButton = [[UIBarButtonItem alloc] 
                                           initWithImage:[UIImage imageNamed:@"icon_zoom_in.png"] 
                                           style:UIBarButtonItemStylePlain 
                                           target:self 
                                           action:@selector(pressButtonIncreaseFont:)
                                           ];
    UIBarButtonItem *decreaseFontButton = [[UIBarButtonItem alloc] 
                                           initWithImage:[UIImage imageNamed:@"icon_zoom_out.png"] 
                                           style:UIBarButtonItemStylePlain 
                                           target:self 
                                           action:@selector(pressButtonDecreaseFont:)
                                           ];
    NSArray *items = [NSArray arrayWithObjects: increaseFontButton, decreaseFontButton, nil];
    self.toolbarItems = items;

    //release buttons
    [increaseFontButton release];
    [decreaseFontButton release];

}

有什么想法吗?找错的想法?

2 个答案:

答案 0 :(得分:0)

Objective-C的一个特性我发现非常烦人且容易出错的是在null对象上调用方法的静默失败。在setupToolBar方法的第一行之后,检查navigationController是否为null:

  NSLog(@" navigationController is 0x%x", self.navigationController);

对于重启案例,navController的创建方式与常规案例相同吗?

答案 1 :(得分:0)

我找到了如何通过消除过程解决这个问题,但我不明白为什么:)

所以修复它的是修改应用程序委托的“didFinishLaunchingWithOptions”方法中的以下行:

  // OLD Entry - Did not work
  //[self.window addSubview:navigationController.view];

  // NEW Entry - Fixed it
  self.window.rootViewController = self.navigationController;

任何想法为什么?