这是一个奇怪的问题:app突然开始崩溃,但没有理由 . 让我解释 .

我正在MacOS上开发一个简单的iOS应用程序(使用Visual Studio for Mac),直到昨天才运行良好但经过一些代码修改(重新格式化代码并添加了2个类,仅此而已)它在执行segue或呈现视图控制器时开始崩溃 .

我试图清理解决方案,删除 binobject 文件夹,删除并重新安装应用程序(从模拟器和\或设备),重置为以前知道工作版本(git)但没有运气:应用程序启动,我按下登录(或其他更改当前ViewController的按钮),它崩溃了 .

例外细节很明确:

抛出Objective-C异常 . 名称:NSInternalInconsistencyException原因:无法在bundle中加载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" 所以我不能解决问题 .

Details:

  • 所有ViewControllers都在同一个故事板中,即应用程序启动时加载的故事板 .

  • 转换到viewControllers是默认的iOS转换:没有自定义组件或效果 .

  • 使用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相关的问题,但没有解释为什么重置为一周前版本没有修复它 .

Software details

  • MacOS High Sierra(10.13.1)

  • Visual Studio for Mac 7.2.2

  • Mono 5.4.1.6(2017-06 / 1f4613aa1ac)(64位)

  • Xamarin iOS版本:11.2.0.11(Visual Studio Enterprise)

  • XCode 9.0.1

我尝试使用更新的Xamarin iOS(11.2.1.0)和更新的XCode(9.1)的另一台Mac,但问题仍然存在 .

有人可以指出我正确的方式吗?现在我几乎尝试了所有的东西,但我仍然坚持不懈......

UPDATE

我试图在故事板中添加一个新的ViewController并将一个segue连接到它并且id工作 . 我检查了差异,我发现新的VC有一个数字ID而不是字母数字(5028而不是PFz-cV-xIy) . 我试图将现有的VC ID更改为新的(未使用),也是内部视图:同样的错误

抛出Objective-C异常 . 名称:NSInternalInconsistencyException原因:无法在bundle中加载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“

看起来我并没有't know why it'搜索一个名为VIEWCONTROLLERID-view-MAINVIEWID的笔尖,但仅在"old"视图控制器上,新创建的控制器没有问题,它们之间的唯一区别是数字ID .

我会继续调查,我会更新这个问题更清楚,并帮助有人有同样的问题 .

UPDATE 2

我发现storyboard xml中的实体在由Visual Studio for Mac设计器创建时具有数字id,在由Xcode创建时具有字母数字id,因此它与主要问题无关 .