iOS6中的UINavigationController崩溃

iOS6中的UINavigationController崩溃,ios,uitableview,uinavigationcontroller,ios6,Ios,Uitableview,Uinavigationcontroller,Ios6,我有一段简单的代码,它将一个新的视图控制器推送到我的导航控制器上 - (IBAction)buttonSelected:(id)sender{ caseBillingFormViewController = [[CaseBillingFormViewController alloc] initWithStyle:UITableViewStyleGrouped]; caseBillingFormViewController.returnScreen = @"FALSE";

我有一段简单的代码,它将一个新的视图控制器推送到我的导航控制器上

- (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
有人能解释一下为什么会发生这种情况吗?
在模拟器5.1和模拟器6.0上测试了相同的代码-错误只发生在后者上

注意,错误是:

'NSUnknownKeyException', reason: '[<CaseBillingFormViewController 0xc09c0b0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key theTableView.'
'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:该类不符合表视图键的键值编码。'

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

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

它以前能工作,但现在不能工作的原因是你很幸运——苹果现在一定在‘initWithNibName:bundle:'中做了一些重要的事情


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

好的,由于我假设它不相关,我没有提到
CaseBillingFormViewController
以前有一个xib文件-当我意识到xib文件没有什么作用时,我删除了它,并用所有适当的初始化器将类转换为UITableViewController

我会澄清…
CaseBillingFormViewController.xib
不存在。
它被删除,所有引用被删除,文件本身也被丢弃和清空。 我甚至还检查了编译的源代码,正如我所想,它不在那里

因此,我认为这不相关

为了修复,我必须从我的设备和模拟器中删除应用程序,然后清理构建,重新启动我的机器,再次清理,然后构建。尽管听起来很复杂,但即使没有一个步骤,错误依然存在

X代码中有一个bug,它不注册已删除的文件,尤其是XIB和故事板。以下是苹果公司的回应:

假设已删除哪些文件时,Xcode不准确 已更改,引发了应用程序包的重新构建,尤其是对于 故事板和xib文件。正如你所说的,你必须做一个清洁的工作 让it实现您的更改的操作。这是Xcode中的一个bug

如果要保留沙箱的其余部分(即文档 Xcode管理器允许您下载应用程序的 从设备到Mac的standbox(减去应用程序包),您可以在其中 在安装应用程序后,可以将其上传回设备 改变。因此,在“管理器”中,选择设备及其名称 “应用程序”项目,选择适当的应用程序,单击 下载按钮,它将下载该沙箱中的数据文件

即使文件已被删除,它仍在从中读取变量。错误中的UITableView实例
TableView
在被删除之前已存在于xib中


这并不意味着它是固定的,但它确实意味着解决方案不在任何人的手中。无论如何,谢谢你们的帮助。

你们的
CaseBillingFormViewController
是否使用xib文件?如果是,请检查
表格视图的插座是否设置正确。干杯。通常,如果将
UITableViewController
与xib文件一起使用,
tableView
的出口会自动设置。为什么您有
表格视图
?我确实使用了xib。这已经不存在了,我的xib只包含一个名为tableview的tableview,但至少有三个版本将其转换为当前方法。xib已经不存在了,我尝试了一个项目>清理,但是没有运气。你能看到崩溃线吗?你能为那个控制器提供一些代码吗?试着恢复模拟器并再次安装应用程序……我会在回答中提供更多的说明。我已经解决了这个问题,苹果公司向我保证这是X代码中的一个bug。太好了——我相信我和@Carina都会非常感激的!在这个行业你永远学不到什么!我也有同样的问题。UITableViewController initwithstyle试图在nib不存在时加载该nib。我尝试了你提到的干净构建重启周期,包括从模拟器中删除应用程序。我没有可以从中删除它的设备。它以前在iOs6模拟器中工作过,现在不工作了。有什么想法吗?