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

时间:2015-08-05 23:37:59

标签: ios uiviewcontroller uinavigationcontroller presentviewcontroller

我有主视图控制器,当通过Parse和Facebook登录验证用户viewDidLoad时:

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的{​​{1}}时,这怎么可能?

1 个答案:

答案 0 :(得分:0)

当您调用[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个视图数组中找到一个视图,这个视图就在这个视图的后面。