无法识别的选择器发送到 UINavigationController 的实例
Posted
技术标签:
【中文标题】无法识别的选择器发送到 UINavigationController 的实例【英文标题】:unrecognized selector sent to instance of UINavigationController 【发布时间】:2015-08-05 23:37:59 【问题描述】:我有主视图控制器,当viewDidLoad
用户通过 Parse 和 Facebook 登录时得到验证:
if ([PFUser currentUser] == nil && [FBSDKAccessToken currentAccessToken] == nil)
WelcomeViewController *welcomeController = [self.storyboard instantiateViewControllerWithIdentifier:@"Welcome"];
[self presentViewController:welcomeController animated:YES completion:nil];
当我尝试从欢迎视图控制器推送数据时,我使用self.presentingViewController
:
MainFeedTableViewController *mc = (MainFeedTableViewController *)self.presentingViewController;
mc.username = self.fbUsername;
但是
编译器将其视为UINavigationController
:
-[UINavigationController setUsername:]: unrecognized selector sent to instance 0x7f92b9009a00
。
当我使用self
的MainFeedTableViewController
进行演示时,这怎么可能?
【问题讨论】:
self.presentingViewController 仅仅意味着自我? 【参考方案1】:当您调用[self presentViewController:welcomeController animated:YES completion:nil];
时,演示是通过 UINavigationController 完成的(我假设您的应用程序中有一个导航控制器)。它的作用是在其导航层次结构中显示视图,如果您的 MainFeedTableViewController
是层次结构中的第一个视图,您可以使用以下内容获取 MainFeedTableViewController
MainFeedTableViewController * viewController = (MainFeedTableViewController*)[self.navigationController.viewControllers objectAtIndex:0];
如果它不是第一个并且你想使用相对定位,你可以这样做
MainFeedTableViewController * viewController = (MainFeedTableViewController*)[self.navigationController.viewControllers objectAtIndex:
[self.navigationController.viewControllers indexOfObject:self ]- 1];
首先会找到自己的索引(WelcomeViewController
),然后在UINavigationController
views 数组中找到视图,它就在这个后面。
【讨论】:
以上是关于无法识别的选择器发送到 UINavigationController 的实例的主要内容,如果未能解决你的问题,请参考以下文章
[UICollectionViewCell imageView]:无法识别的选择器发送到实例