Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在同一情节提要上加载UIViewController_Objective C_Uinavigationcontroller_Storyboard - Fatal编程技术网

Objective c 在同一情节提要上加载UIViewController

Objective c 在同一情节提要上加载UIViewController,objective-c,uinavigationcontroller,storyboard,Objective C,Uinavigationcontroller,Storyboard,我试图在同一情节提要上加载UIViewController,我已为视图控制器提供了情节提要ID、恢复ID(与情节提要ID相同)和视图控制器标题“分解” 我有一个注册为getStarted的操作,在该操作中我运行以下代码,我还使用Get Started按钮导入要加载到视图控制器中的视图控制器 #import "BreakdownViewController.h" " 是,注销,但视图控制器未加载 知道为什么吗?视图无法加载,因为您试图从nib文件而不是故事板加载它。我假设BreakdownVie

我试图在同一情节提要上加载UIViewController,我已为视图控制器提供了情节提要ID、恢复ID(与情节提要ID相同)和视图控制器标题“分解”

我有一个注册为getStarted的操作,在该操作中我运行以下代码,我还使用Get Started按钮导入要加载到视图控制器中的视图控制器

#import "BreakdownViewController.h"
"

是,注销,但视图控制器未加载


知道为什么吗?

视图无法加载,因为您试图从nib文件而不是故事板加载它。我假设
BreakdownViewController
UIViewController
的子类,或者是可以正确加载的控制器。把你的代码改成这个

  // You could change `BreakdownViewController` to `UIViewController` if it doesn't work with it.
  // iOS 6.0 and above.
  BreakdownViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"breakdown"];
  [self presentViewController:controller animated:YES completion:nil];
由于方法被弃用,您应该真正使用上面的代码,但您也可以这样做

   // iOS 5.0
   BreakdownViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"breakdown"];
   [self presentModalViewController:controller animated:YES];
您还可以添加一些过渡动画,以及在
presentModalViewController
presentViewController
之前添加下面的行

   [controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
您还可以将“presentModalViewController”或“presentViewController”行替换为

  [self.navigationController pushViewController:controller animated:YES];
编辑

用户使用了上面提供的代码后,出现了一个错误

2013-02-24 16:08:14.517 BudgetMe[1300:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFString stringByAppendingString:]: nil argument' *** First throw call stack: (0x1cac012 0x10e9e7e 0x1cabdeb 0xaf87d5 0xddba 0x10f1c7 0x10f232 0x11ac25 0x31a3a3 0x117ee3 0x118167 0x312c 0x10fd705 0x312c0 0x31258 0xf2021 0xf257f 0xf16e8 0x60cef 0x60f02 0x3ed4a 0x30698 0x1c07df9 0x1c07ad0 0x1c21bf5 0x1c21962 0x1c52bb6 0x1c51f44 0x1c51e1b 0x1c067e3 0x1c06668 0x2dffc 0x252d 0x2455) 
当它到达
[self.navigationController pushViewController…]
/
[self-presentViewController…]
时被抛出。我认为,由于用户试图推送/呈现的视图控制器上的问题,现在被抛出的是错误。我之所以相信这一点,是因为当点击这一行代码时,它会在移动到实际的视图控制器之前尝试运行类似于
viewDidLoad
的方法,因此如果抛出错误,它会显示为好像它在这一行。找出这个问题的最好方法是充分利用断点


我以前遇到过这个问题

您可能想使用这个:

[self.storyboard instantiateViewControllerWithIdentifier:@"breakdown"];

如果我正确理解了这个问题,您的视图控制器与您试图从中推送的视图控制器定义在同一个故事板中,而不是alloc initWithNibName。

?你为什么不使用segue?创建从源到目标的推送序列,并使用按钮触发该序列

连接segue后,您可以通过以下方式以编程方式调用推送:

[self performSegueWithIdentifier:@"breakdownSegue"];
但是,如果将segue直接连接到要调用segue的按钮,则可以跳过该步骤


如果问题是BreakdownViewController是在外部.xib中定义的,并且您将其添加到此情节提要中,只需从情节提要场景中删除该视图,它就会从.xib中加载该视图。

我尝试了该代码,但出现以下错误:2013-02-24 16:08:14.517 BudgetMe[1300:c07]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'***-[\uu NSCFString stringByAppendingString:]:nil参数'***第一次抛出调用堆栈:(0x1cac012 0x10e9e7e 0x1cabdeb 0xaf87d5 0xddba 0x10f1c7 0x10f232 0x11ac25 0x31a3a3 0x117ee3 0x118167 0x312c 0x10fd705 0x312c0 0x31258 0xf2021 0xf257f 0xf16e8 0x60f02 0x3ed4a 0x30698 0x1c07df9 0x1c07ad0 0x1c21bf5 0x1c21962 0x1c52bb6 0x1c51f44 0x1C51B 0x067E3 0x06668 0x2DFC 0x2455)@这与提供的代码无关。请在
[self.navigationController pushViewController…]或
[self-presentViewController…]处放置断点
您曾经使用过哪一个。我相信当它到达这一行时会发生这种情况,因为当它试图显示新的视图控制器时,它试图在下一个控制器上运行方法
stringByAppendingString:
。因此,这表明代码正在工作,您只是在试图显示的控制器上有另一个错误。@Jacob CLARK它在抛出错误之前到达断点了吗?看看这个,我也遇到了同样的问题。我把断点放在代码行[self present]上。它到达它然后断开,我把它放在那行下面,它断开了
[self performSegueWithIdentifier:@"breakdownSegue"];