无法使用导航控制器加载新视图

时间:2013-11-15 13:34:38

标签: ios uinavigationcontroller

我是IOS开发的新手,我正在尝试以编程方式加载新视图。我有一个根视图。应用程序启动时,根视图会正确加载。从根视图,当我按下按钮时,我想加载一个新视图。

新视图的自定义类是:PlaceDetailsController

我的代码是:

 PlaceDetailsController *x = [[PlaceDetailsController alloc] initWithNibName:@"PlaceDetailsController" bundle:nil];
 [self.navigationController pushViewController:x animated:YES];

我收到以下错误:

2013-11-15 17:29:06.164 Info.mu.final[1806:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/noor/Library/Application Support/iPhone Simulator/6.1/Applications/7FD5D7FC-38DE-448F-84F1-17879202DBA7/Info.mu.final.app> (loaded)' with name 'PlaceDetailsController''
*** First throw call stack:
(0x211b012 0x19cce7e 0x211adeb 0x1134ef9 0xff97e7 0xff9dc8 0xff9ff8 0xffa232 0xffa4da 0x10118e5 0x10119cb 0x1011c76 0x1011d71 0x101289b 0x1012e93 0x1012a88 0x2a05 0xaa3ca 0xa7c22 0x11e385a 0x11e299b 0x11e40df 0x11e6d2d 0x11e6cac 0x11dea28 0xf4b972 0xf4be53 0xf29d4a 0xf1b698 0x283bdf9 0x283bad0 0x2090bf5 0x2090962 0x20c1bb6 0x20c0f44 0x20c0e1b 0x283a7e3 0x283a668 0xf18ffc 0x226d 0x2195)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

所选视图是我要加载的视图: enter image description here

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

请务必检查是否在xib / storyboard文件中将customView设置为PlaceDetailsController。 (转到xib / storyboard文件,单击视图,转到右侧面板上的身份检查器,并确保在顶部的自定义类textfild中看到PlaceDetailsController。)

如果这是正确的,当您在XCode之外重命名某些文件时,通常会发生此错误。要解决此问题,您只需从项目中删除文件(右键单击 - 删除(确保只删除参考)并在项目中重新导入它们。

之后一切都应该没问题。

答案 1 :(得分:2)

我觉得你正在使用故事板,对吗?

要推送启用了故事板的视图,请使用以下代码。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"viewIdentifier"];
[self presentViewController:viewController animated:YES completion:nil];

您需要确保在故事板中设置StoryboardID(它位于身份检查器中(一旦您单击视图控制器,右侧的第三个按钮)。)

编辑:如果您正在从导航控制器推送视图;

你需要设置一个Segue(比听起来容易得多!)。在故事板中,按住Ctrl键并单击视图控制器并将其拖动到其他视图控制器并选择“推送”,您还需要提供此推送搜索和标识符,这可以在“属性”检查器中完成(确保您已完成)点击Push segue对象!)。然后在您希望推送发生的代码中使用以下内容:

[self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];