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);.
请注意 into 和 info。
您的代码看起来不错:).
更新:
按照我的步骤再做一次:
1.I 创建了一个新的 iOS 项目并且 right click the project
--> add
--> new item
--> ViewController With Storyboard
2.Go 到您刚刚创建的故事板并转到工具箱,select 一个新的 ViewControllor 并将其添加到故事板。
3.Go 到 Storyboard 中 ViewContrllor 的 properties
面板并在那里设置 Class
和 Storyboard 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 和控制器属性。当我尝试控制器的旧名称时,它以某种方式起作用了。
每当我尝试以编程方式从另一个故事板访问 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);.
请注意 into 和 info。
您的代码看起来不错:).
更新:
按照我的步骤再做一次:
1.I 创建了一个新的 iOS 项目并且 right click the project
--> add
--> new item
--> ViewController With Storyboard
2.Go 到您刚刚创建的故事板并转到工具箱,select 一个新的 ViewControllor 并将其添加到故事板。
3.Go 到 Storyboard 中 ViewContrllor 的 properties
面板并在那里设置 Class
和 Storyboard 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 和控制器属性。当我尝试控制器的旧名称时,它以某种方式起作用了。