呈现视图控制器,故事板中不包含视图控制器。

4
在最近的Xamarin iOS或Xamarin Studio更新中,出现了一些变化,我现在只需简单地使用PresentViewController就会遇到奇怪的错误。这完全相同的代码一个月前是可以工作的。我认为Xamarin中有些东西发生了改变,因为他们最近在Storyboard Properties/Widget中添加了"Module"行。
           // Instantiate and push controller
            UIStoryboard storyBoard = UIStoryboard.FromName("MainStoryboard", null);
            CustomViewController navigationController = storyBoard.InstantiateViewController("CustomViewController") as CustomViewController;
            this.InvokeOnMainThread(() => {
                this.PresentViewController(
                    navigationController,
                    true,
                    null
                );
            });

以下代码生成了基于下面Storyboard截图的错误:
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?


感谢您的更新。在故事板文件中手动添加storyboardIdentifier对我很有帮助。希望他们能尽快修复它。 - anguish
我与Xamarin支持团队进行了交流,他们表示正在修复该漏洞并通过QA流程。 我找到的最佳解决方案是降级您的Xamarin版本(也许还有xcode?)或者只需执行我在此处建议的解决方法。但是,当他们修复该漏洞时,这种解决方法可能会导致未来出现丑陋的破碎故事板视图... - LampShade
我只是在做Xamarin多屏应用程序的教程,遇到了这个错误。我以为我做错了什么(我使用的是Visual Studio,代码非常相似)。看起来像是个bug。谢谢。 - Adam Mendoza
手动编辑已经解决了问题。谢谢。 - Adam Mendoza
2个回答

1

对我来说,唯一的解决方案似乎是打开xCode并在那里添加storyboard。令人担忧的是这个bug已经到达了我正在工作的稳定渠道...

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


是的,这个 bug 似乎是 Xamarin 特有的问题,所以在 Xcode 中操作应该不会出现问题。根据我最后了解的情况,该 bug 的修复已经通过 Alpha 频道进行了更新,如果还未发布,也应该很快能稳定推出了。不过我最近并没有及时升级软件。 - LampShade

0
我遇到了同样的错误。不知何故,使用相同方法的旧代码可以正常工作。只有在创建新的ViewController时才会出现问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接