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

当我使用selfMainFeedTableViewController 进行演示时,这怎么可能?

【问题讨论】:

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),然后在UINavigationControllerviews 数组中找到视图,它就在这个后面。

【讨论】:

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

[UICollectionViewCell imageView]:无法识别的选择器发送到实例

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

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

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

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

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