【问题标题】:iOS segue between view controllers with navigation controllersiOS 在视图控制器和导航控制器之间切换
【发布时间】:2023-03-06 08:44:01
【问题描述】:

我正在尝试使用故事板 segue 传递一个值。我的故事板去导航控制器-> 视图控制器-> 视图控制器。

我确信其他所有设置都正确。在模拟器上测试之前我没有任何错误,但随后出现:

[RunViewController2 topViewController]:无法识别的选择器发送到实例 0x109d6a0b0 2014-03-06 22:54:31.261 RunPal[22381:70b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[RunViewController2 topViewController]:无法识别的选择器发送到实例 0x109d6a0b0”

我在第一个视图控制器中使用的代码是:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
   if([segue.identifier isEqualToString:@"passSegmentedValue"]){

      UINavigationController *nav = [segue destinationViewController];
       RunViewController2 *runVC2 = (RunViewController2 *)nav.topViewController;

       run2VC.weekIdentifier = ((UISegmentedControl*) sender).selectedSegmentIndex;
   }
}

【问题讨论】:

  • 异常清楚地表明您正在尝试将消息 topViewController 发送到 RunViewController2。您能否确保 segue 指向导航控制器。
  • 请张贴您的故事板截图

标签: ios iphone objective-c


【解决方案1】:

试试这个:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
   if([segue.identifier isEqualToString:@"passSegmentedValue"]){

       RunViewController2 *runVC2 = [segue destinationViewController];

       run2VC.weekIdentifier = ((UISegmentedControl*) sender).selectedSegmentIndex;
   }
}

【讨论】:

  • 试过了,现在出现以下错误:code 2014-03-07 14:14:50.894 RunPal[39342:70b] -[UIButton selectedSegmentIndex]: unrecognized selector sent to instance 0x109b75150 2014 -03-07 14:14:50.930 RunPal[39342:70b] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIButton selectedSegmentIndex]:无法识别的选择器发送到实例 0x109b75150”code
  • 您的发件人是 UIButton,而不是 UISegmentedControl。您可以发布您的视图的屏幕截图吗?
  • 我需要在按下开始运行按钮时推送到第二个视图控制器,这也应该传递在分段控件上选择的值。谢谢。
  • 好的!首先,您需要一个 IBOutlet 用于您的分段控件:ctrl+将您的分段控件拖动到您的 VC 以创建一个 IBOutlet 属性。然后在您的代码中:run2VC.weekIdentifier = self.yourSegmentedControlPropertyName.selectedSegmentIndex;
  • 刚试了一下,好像没有传值。我已经对其进行了编程,以将标签设置为段索引的值,但它只是显示为 0。
【解决方案2】:

通过使用RunViewController2 *runVC2 = [segue destinationViewController]; 行的断点,在调试控制台中使用po 命令检查目标控制器的类型。

这肯定会告诉您目的地不是UINavigationController 类型,因此调用topViewController 方法将导致崩溃。您的目标视图控制器可能是 RunViewController2 类型,实际上就像 Armand DOHM 提到的那样。

【讨论】: