Objective-C 抛出异常。名称:NSInvalidArgumentException 原因:无法在包 NSBundle 中找到名为 'visit_info' 的故事板

Objective-C exception thrown. Name: NSInvalidArgumentException Reason: Could not find a storyboard named 'visit_info' in bundle NSBundle

每当我尝试以编程方式从另一个故事板访问 ViewController 时,我都会收到此错误。似乎我的 xamarin.ios 应用无法识别包含 ViewController 的故事板。我的故事板名称是 visit_info.storyboard.

我试过下面的代码

 UIStoryboard board = UIStoryboard.FromName("visit_info", null);
            UIViewController ctrl = (visitController)board.InstantiateViewController("visitController");
            ctrl.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
            this.PresentViewController(ctrl, true, null);

这是我在上面的第一个语句中遇到的完整错误:

Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: Could not find a storyboard named 'visit_info' in bundle NSBundle </Users/amer/Library/Developer/CoreSimulator/Devices/3B343541-D0E1-410E-880C-18E9FE0289D8/data/Containers/Bundle/Application/A01C5D60-96A8-4BF8-993B-C0D90EE7EE5A/samra_op2.app> (loaded)
Native stack trace:
    0   CoreFoundation                      0x00007fff2043a126 __exceptionPreprocess + 242
    1   libobjc.A.dylib                     0x00007fff20177f78 objc_exception_throw + 48
    2   UIKitCore                           0x00007fff247e48a6 -[UIStoryboard name] + 0
    3   samra_op2                           0x0000000100696699 xamarin_dyn_objc_msgSend + 217
    4   ???                                 0x00000001062ec539 0x0 + 4398695737 


 

我认为这里有一个错字,你的故事板名称是 visit_into.storyboard 而在你的代码中它是 UIStoryboard.FromName("visit_info", null);.

请注意 intoinfo

您的代码看起来不错:).

更新:

按照我的步骤再做一次:

1.I 创建了一个新的 iOS 项目并且 right click the project --> add --> new item --> ViewController With Storyboard

2.Go 到您刚刚创建的故事板并转到工具箱,select 一个新的 ViewControllor 并将其添加到故事板。

3.Go 到 Storyboard 中 ViewContrllor 的 properties 面板并在那里设置 ClassStoryboard ID,同时检查 Use Storyboard ID.

4.Then在另一个ViewController中调用你的代码:

public override void ViewDidAppear(bool animated)
{
    base.ViewDidAppear(animated);

    UIStoryboard board = UIStoryboard.FromName("visit_info", null);
    UIViewController ctrl = (visit_info)board.InstantiateViewController("visit_info");// here use storyboard ID
    ctrl.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
    this.PresentViewController(ctrl, true, null);
}

我知道答案,但我需要解释。当我第一次制作控制器时,我编辑了名称,然后更改了与控制器相关的所有其他名称,包括 controller.cs 中的控制器 class 名称、controller.designer.cs 和控制器属性。当我尝试控制器的旧名称时,它以某种方式起作用了。