PresentViewController,storyboard不包含视图控制器

时间:2015-03-16 14:38:52

标签: uiviewcontroller xamarin.ios xamarin uistoryboard

在最近的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'

的视图控制器

enter image description here enter image description here

我的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?

2 个答案:

答案 0 :(得分:1)

对我来说,唯一的解决方案似乎是打开xCode并在那里添加一个故事板。很关心这个bug到达了稳定的通道,我正在努力......

注意:手动编辑storyboard xml并没有给我正确的运行时结果......

答案 1 :(得分:0)

我得到了同样的错误。出于某种原因,旧代码使用相同的approch。只有在创建新的ViewController时才会出现问题。