【问题标题】:crash passing parameter from one viewcontroller to another将参数从一个视图控制器传递到另一个视图控制器时崩溃
【发布时间】:2014-01-19 20:36:36
【问题描述】:

我正在尝试将参数从一个视图控制器传递到另一个,但应用程序 crashes 出现异常。

我的代码是这样的:

SelectedItemViewController *nextView = [storyboard instantiateViewControllerWithIdentifier:@"SelectedItemViewID"];

nextView.m_selectedItemId = [NSNumber numberWithInt:777];

[self presentViewController:nextView animated:YES completion:NULL];

我的堆栈中有以下内容:

* 由于未捕获的异常 'NSInvalidArgumentException', reason: '-[UINavigationController setM_selectedItemId:]: unrecognized selector sent to instance 0x9c765d0'

而终止应用

【问题讨论】:

  • 你确定吗,你的视图控制器标识符是SelectedItemViewID
  • 是的,非常确定:) 看起来像是与导航控制器相关的问题。我的视图嵌入到导航控制器中,此 ID 是导航控制器 ID。如果还有导航控制器,我不知道如何传递参数。

标签: ios iphone objective-c viewcontroller


【解决方案1】:

在您的故事板中,标识符为SelectedItemViewID 的视图控制器是导航控制器,而不是SelectedItemViewController。因此,在设置 m_selectedItemId 之前,您应该访问导航控制器根视图控制器(应该是您的 SelectedItemViewController)。

【讨论】:

  • 关于视图控制器 ID,您是对的,但我传递了导航控制器 ID,因为我的 SelectedItemViewController 嵌入到导航控制器中,我需要重定向到它,否则我会丢失导航栏。任何想法如何使这项工作?
  • 你需要从导航控制器中获取视图控制器,比如navigationController.viewControllers[0];
【解决方案2】:

我在这里找到了解决方案:instantiateViewControllerWithIdentifier and pass data

如果你想通过导航控制器将参数传递给视图控制器应该怎么做:

UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"SelectedItemViewID"];

SelectedItemViewController *nextView = navigationController.viewControllers[0];

nextView.m_selectedItemId = [NSNumber numberWithInt:777];

[self presentViewController:navigationController animated:YES completion:NULL];

【讨论】:

    【解决方案3】:

    当您在情节提要中选择视图控制器时,类是否设置为 SelectedItemViewController

    显然,您似乎在 SelectedItemViewController 上有一个 @property ... m_selectedItemId(或至少设置方法 setM_selectedItemId),否则您的代码甚至无法编译。但似乎[storyboard instantiateViewControllerWithIdentifier:@"SelectedItemViewID"] 并没有真正返回预期的SelectedItemViewController。因此,我感觉您忘记在情节提要中将正确的类名设置为 SelectedItemViewController

    【讨论】:

    • plu 代码编译完美,当我尝试重定向到新视图时发生崩溃,属性也存在,但我没有 setM_selectedItemId,并且看起来没有强制使用该方法,据我从 stackoverflow 的其他帖子中了解到。
    • 查看 Wain 的回答,我认为他是对的 :)。所以在代码中它看起来像: UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"SelectedItemViewID"]; SelectedItemViewController *nextView = (SelectedItemViewController *)navigationController.rootViewController; nextView.m_selectedItemId = [NSNumber numberWithInt:777];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多