在最近的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)
---------------更新----------------
所以我在文本编辑器中打开storyboard文件并检查Xamarin Designer生成的代码。几个月前创建的Controller有一个storyboardIdentifier,但今天创建的Controller没有storyboardIdentifier,尽管我已经在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,故事板就会成功打开,没有例外。看起来像个bug?
答案 0 :(得分:1)
对我来说,唯一的解决方案似乎是打开xCode并在那里添加一个故事板。很关心这个bug到达了稳定的通道,我正在努力......
注意:手动编辑storyboard xml并没有给我正确的运行时结果......
答案 1 :(得分:0)
我得到了同样的错误。出于某种原因,旧代码使用相同的approch。只有在创建新的ViewController时才会出现问题。