发送了无法识别的选择器

Posted

技术标签:

【中文标题】发送了无法识别的选择器【英文标题】:Unrecognized selector sent 【发布时间】:2014-03-25 14:43:29 【问题描述】:

我有 1 个视图控制器和 1 个标签栏控制器和 2 个导航控制器。

在我的简单视图中,我有一个表单,然后当我单击“登录”按钮时,我想在标签栏控制器中加载第一个视图。

这段代码完美运行:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    Inicial *telaInicial = [storyboard instantiateViewControllerWithIdentifier:@"tabBar"];
    [self presentViewController:telaInicial animated:YES completion:nil];

但我想发送和重视这个视图“初始”,我把这个:

telaInicial.email = email.text;

但我收到此错误消息:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UITabBarController setEmail:]: unrecognized selector sent to instance 0x9fdc8f0”

【问题讨论】:

标识符为“tabBar”的视图控制器是一个UITabBarController,而不是一个Inicial。 此代码使用选项卡栏加载我想要的视图...但我无法发送值...我想使用选项卡栏和我要发送的值......是的,“tabBar”是我的 UITabBarController 中的“故事板 ID” 我的回答有帮助吗?如果接受,请记住接受它。 【参考方案1】:

您认为是Inicial 实例的对象telaInicial 实际上是UITabBarController,因此您不能在其上设置email 属性,因为它不存在。

我想你想要这样的东西......

UITabBarController *tabBarController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabBar"];

UINavigationController *navController = tabBarController.viewControllers[0];

Inicial *telaInicial = navController.topViewController;

telaInicial.email = // blah

【讨论】:

使用此代码我收到此错误:不兼容的指针类型初始化 'Initial *' 使用类型为 'UIViewController' 的表达式 这是警告而不是错误。只需像这样投射结果...(Inicial *)navController.topViewController;.【参考方案2】:

这意味着 telaInicial 对象没有 setEmail 方法。那是您编写的子类的实例吗?如果是这样,您可能会收到错误,因为您没有为它编写 setEmail 方法,或者因为您没有将实例变量 email 声明为 @property,在这种情况下,它的 setter 和 getter 方法将自动合成通过 XCode(在 XCode 4.something 之前,我认为您需要明确地合成您的属性 - 在该版本之后,它们是自动的)。

【讨论】:

在我的“初始”课程中,我有 NSString *email;和@property (nonatomic, strong) NSString *email;...我如何使用这个 setEmail? 看错误信息-`'-[UITabBarController setEmail:]`,他没有首字母,他有标签栏。 我在链接到 UITabBarController 时遇到问题,因为如果我链接到初始导航控制器,我可以设置我想要的值...但是标签栏不存在【参考方案3】:

尝试编写类,它将存储您的数据。 您可以从 AppDelegate 访问它(不是很好的解决方案,但非常快)。

【讨论】:

以上是关于发送了无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

快速代码崩溃:“发送到实例的无法识别的选择器”

NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器

无法识别的选择器发送到实例,UISlider swfit3

发送了无法识别的选择器

无法识别的选择器发送到实例

无法识别的选择器发送到数组中的实例[重复]