这是一个奇怪的问题:app突然开始崩溃,但没有理由。 让我解释一下。
我正在MacOS上开发一个简单的iOS应用程序(使用Visual Studio for Mac),直到昨天仍然运行良好但经过一些代码修改(重新格式化代码并添加了2个类,仅此而已)它在执行segue时开始崩溃或呈现视图控制器。
我尝试清理解决方案,删除bin
和object
文件夹,删除并重新安装应用程序(均来自模拟器和/或设备),重置为之前知道的工作版本(git)但没有好运:app启动,我按下登录(或其他改变当前ViewController的按钮),然后崩溃。
异常详情很清楚:
抛出Objective-C异常。名称:NSInternalInconsistencyException 原因:无法在捆绑中加载NIB:'NSBundle “/Users/Izzu/Library/Developer/CoreSimulator/Devices/AF902EFF-4737-4A04-A238-40FBA092ABC2/data/Containers/Bundle/Application/E7FB6ED2-384B-4971-9FDE-0E2D11A161D3/MY_APP.app” (加载)'名称'MMC-nl-GEi-view-twi-04-tAp'
但问题是:从按钮调用的ViewController名为SignUpView
。有一个具有相同名称的关联类,storyboardIdentifier是相同的。检查storyboard xml我可以看到将呈现的ViewController的id是"MMC-nl-GEi"
,其中包含的主视图id是"twi-04-tAp"
所以我不明白问题出在哪里。
它一直工作到前一天所有其他转换(我有很多ViewControllers与storyboardIdentifier具有正确的名称,我几乎每天都与它们一起工作直到昨天),最糟糕的是重置为以前的版本无法解决。
详细信息:
使用segue或PresentViewController方法执行转换,两次崩溃
调试代码
var PinViewController = this.Storyboard.InstantiateViewController("PinViewController");
PinViewController.ModalPresentationStyle = UIModalPresentationStyle.OverCurrentContext;
PinViewController.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical;
this.PresentViewController(PinViewController, true, null);
表明PinViewController
不为空,而且是正确的。
我尝试使用segues和PresentViewController
创建另一个示例应用程序,它正在工作,所以我认为这是app \ project相关的问题,但不解释为什么重置为一周前的版本没有修复它。
软件详情:
我尝试使用更新的Xamarin iOS(11.2.1.0)并更新了XCode(9.1)的另一台Mac,但问题仍然存在。
有人可以指出我正确的方法吗?现在我几乎尝试了所有的东西,而且我仍然坚持不懈......
更新
我尝试在故事板中添加一个新的ViewController并将一个segue连接到它并且id工作。我检查了差异,我发现新VC有一个数字ID而不是字母数字( 5028 而不是 PFz-cV-xIy )。 我试图将现有的VC ID更改为新的(未使用),也是内部视图:同样的错误
抛出Objective-C异常。名称:NSInternalInconsistencyException 原因:无法在捆绑中加载NIB:'NSBundle “/Users/Izzu/Library/Developer/CoreSimulator/Devices/AF902EFF-4737-4A04-A238-40FBA092ABC2/data/Containers/Bundle/Application/E7FB6ED2-384B-4971-9FDE-0E2D11A161D3/MY_APP.app” (已加载)'名称为'5027-view-5029'
看来,我不知道为什么它会搜索一个名为 VIEWCONTROLLERID-view-MAINVIEWID 的nib,但仅限于“旧”视图控制器,新创建的一个没有问题且唯一的区别它们之间是数字ID。
我会继续调查,我会更新这个问题更清楚,并帮助有人有同样的问题。
更新2
我发现storyboard xml中的实体在由Visual Studio for Mac设计器创建时具有数字ID,在由Xcode创建时具有字母数字id,因此它与主要问题无关。