【发布时间】:2015-05-18 17:30:05
【问题描述】:
在最近的 Xamarin iOS 或 Xamarin Studio 更新中发生了一些变化,现在我在使用 PresentViewController 时遇到了奇怪的错误。一个月前,同样的代码有效。我认为 Xamarin 中的某些内容发生了变化,因为他们最近在故事板属性/小部件中添加了“模块”行
// Instantiate and push controller
UIStoryboard storyBoard = UIStoryboard.FromName("MainStoryboard", null);
CustomViewController navigationController = storyBoard.InstantiateViewController("CustomViewController") as CustomViewController;
this.InvokeOnMainThread(() => {
this.PresentViewController(
navigationController,
true,
null
);
});
上面的代码根据下面的故事板截图生成了这个错误:
Foundation.MonoTouchException:抛出 Objective-C 异常。名称:NSInvalidArgumentException 原因:Storyboard () 不包含标识符为“CustomViewController”的视图控制器
我的 Xamarin Studios 版本是 5.8 build 443,Xamarin iOS 是 8.8.0.2,Xcode 是 6.2 (6776)
---------------更新----
所以我在文本编辑器中打开故事板文件并检查 Xamarin Designer 生成的代码。几个月前创建的控制器有一个故事板标识符,但今天创建的控制器没有一个故事板标识符,即使我已经在 Xamarin Designer 中明确设置了它......这听起来有问题。代码如下:
更新前几个月前生成的旧控制器:
<navigationController definesPresentationContext="YES" id="123" sceneMemberID="viewController" storyboardIdentifier="RedViewNavigationController" restorationIdentifier="RedViewNavigationController">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="126">
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
</navigationBar>
<connections>
<segue destination="125" kind="relationship" relationship="rootViewController" id="124"/>
</connections>
</navigationController>
今天生成的导致异常的新代码:
<navigationController definesPresentationContext="YES" id="164" sceneMemberID="viewController" restorationIdentifier="JZCustom">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="167">
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
</navigationBar>
<connections>
<segue destination="166" kind="relationship" relationship="rootViewController" id="165"/>
</connections>
</navigationController>
因此,一旦您在文本编辑器中手动打开情节提要文件并添加情节提要标识符,情节提要就会成功打开而不会出现异常。看起来像个错误?
【问题讨论】:
-
感谢您的更新。手动将storyboardIdentifier 添加到故事板文件对我有用。我希望他们能尽快修复它。
-
我与 Xamarin 支持人员进行了交谈,他们说正在修复错误并通过 QA 流程。我发现的最佳选择是降级您的 Xamarin 版本(也许是 xcode?),或者只是执行我在此处建议的解决方法。但是,当他们修复错误时,这种解决方法可能会导致未来的故事板视图出现丑陋的损坏......
-
我只是在为多屏应用程序做 Xamarin 教程并收到此错误。我以为我做错了什么(我使用了 Visual Studio,代码非常相似)。看起来这是一个错误。谢谢
-
手动编辑修复了它。谢谢
标签: uiviewcontroller xamarin.ios xamarin uistoryboard