发送了无法识别的选择器
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 时发送到实例的无法识别的选择器