【问题标题】:Objective-C exception thrown. Name: NSInvalidArgumentException Reason: Could not find a storyboard named 'visit_info' in bundle NSBundle抛出 Objective-C 异常。名称:NSInvalidArgumentException 原因:在捆绑包 NSBundle 中找不到名为“visit_info”的故事板
【发布时间】:2021-02-09 03:57:36
【问题描述】:

每当我尝试以编程方式从另一个故事板访问 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 


 

【问题讨论】:

  • 在项目目标中 -> Build Phases -> Copy Bundle Resourcesvisit_into.storyboard 存在吗?
  • 这是在 Visual Studio 上吗?我找不到它
  • 对不起,我的错误,我没有注意到这是 Xamarin。您遇到的异常意味着没有名为“visit_info”的情节提要,因此您确实需要检查文件是否被复制。

标签: c# ios xamarin.ios storyboard visual-studio-2019


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    请小心进入信息

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

    更新

    按照我的步骤再做一遍:

    1.我新建了一个iOS项目right click the project --> add --> new item --> ViewController With Storyboard

    2.转到刚刚创建的故事板并转到工具箱,选择一个新的 ViewContrllor 并将其添加到故事板。

    3.进入storyboard中ViewContrllor的properties面板,设置ClassStoryboard ID,同时勾选Use Storyboard ID

    4.然后在另一个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);
    }
    

    【讨论】:

    • 不是这样的。我只是在堆栈溢出时写错了名字,而不是在代码上
    • 我只是测试了代码,它运行良好。能否请您删除 visit_info.storyboard 并重新创建一个新的然后重试?
    • 我试过了,没有任何改变,仍然面临同样的问题。
    • 如果调用 UIStoryboard.FromName("Main", null); 会遇到同样的问题吗?
    • 如果我使用 UIStoryboard.FromName("Main", null); 它在第二行给我一个错误,说没有名为 visitController 的控制器。 Objective-C exception thrown. Name: NSInvalidArgumentException Reason: Storyboard (&lt;UIStoryboard: 0x6000028939c0&gt;) doesn't contain a view controller with identifier 'visitController'
    猜你喜欢
    • 2012-01-31
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多