ios - UINavigationController 在 iOS6 中崩溃

标签 ios uitableview uinavigationcontroller ios6

我有一段简单的代码,可以将新的 View Controller 推送到我的导航 Controller 上

- (IBAction)buttonSelected:(id)sender{
    caseBillingFormViewController = [[CaseBillingFormViewController alloc] initWithStyle:UITableViewStyleGrouped];
    caseBillingFormViewController.returnScreen = @"FALSE";
    [self.navigationController pushViewController:caseBillingFormViewController animated:YES];
}

我在最后一行发生崩溃:

[self.navigationController pushViewController:caseBillingFormViewController animated:YES];

我不知道为什么会发生这种情况,这是 iOS6 的新功能。升级版本之间的代码库没有改变,所以我不确定为什么会发生这种情况。

我的 caseBillingFormViewController 在我的界面中命名:

CaseBillingFormViewController *caseBillingFormViewController;

我已经检查了 self.navigationController 的完整性,并且全部检查完毕:

NSLog(@"%i",[self.navigationController respondsToSelector:@selector(pushViewController:animated:)]); 
//gives 1

问题是这只出现在由 UITableView 控制的屏幕上 -

caseBillingFormViewController = [[CaseBillingFormViewController alloc] initWithStyle:UITableViewStyleGrouped];
//crashes

savedOrdersViewController = [[SavedOrdersViewController alloc] initWithNibName:@"SavedOrdersViewController" bundle:[NSBundle mainBundle]];
//does not crash

任何人都可以解释为什么会发生这种情况吗?
在 Simulator 5.1 和 Simulator 6.0 上测试了相同的代码 - 仅后者发生错误。

注意,错误是:

'NSUnknownKeyException', reason: '[<CaseBillingFormViewController 0xc09c0b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key theTableView.'

最佳答案

请注意,“initWithNibName:bundle:”是 UIViewController 的指定初始值设定项。你的子类是否带有两个零(这是可以的)?你不知道 UIViewController 在它的 init 例程中做了什么,所以你必须调用它,否则你的理由就站不住脚。

如果这在过去有效,我假设您实现了“loadView”。如果是这样,您可以在子类 init 中使用指定为属性的样式创建表(只要它调用指定的 super 即可。)

它以前有效而现在无效的原因是你很幸运 - Apple 现在肯定在“initWithNibName:bundle:”中做一些重要的事情。

此外,如果您要子类化 UITableViewController (不是 UIViewController),则可能需要将 self.tableView 设置为 self.view - 不确定 - 但无论如何,您应该在创建对象之后但在推送之前进行验证view 和 tableView 都已设置 - 通过在推送之前记录它们。如果其中一个为零,则不要继续。

关于ios - UINavigationController 在 iOS6 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606209/

相关文章:

ios - 如何在 swift/iOS 中更新谷歌地图标记位置

objective-c - 如何在 UIImageView 上方显示一个不可见的交互按钮

swift - 线程1 : Exception: “attempt to insert row 1 into section 1, but there are only 1 sections after the update”

iOS - 从表格 View 中查看不会显示导航栏

ios - 根据 Storyboard 中导航 Controller 的不同按钮调用同一选项卡栏 Controller 的特定选项卡

ios - 在 ARKit Camera 中像 snapchat 一样拍照

ios - 无法在 iPhone 6 中安装 voip 应用程序

ios - 删除 uinavigationbar 标题边距

iphone - indexPath.row-1 是 4294967295

ios - 如何设置要放入 tableView 单元格中的 UIImage 的大小