调用 ViewController 的方法,该方法从 App Delegate 推送另一个 ViewController



在我开始之前,我已经搜索了Stackoverflow如何做到这一点,我看到了很多相关的帖子,但没有一个对我有用,我不知道为什么。

所以基本上我有一个loginViewController,在其中,我有一个调用GoogleSignIn的方法:

- (void)googleTap:(id)sender
{
    [[GIDSignIn sharedInstance] signIn];
}

现在,按照GoogleSignIn的设置方式,登录调用的结果在AppDelegate.m中处理。

- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error {
    // Perform any operations on signed in user here.
    if (!error) {
        NSString *userId = user.userID;                  // For client-side use only!
        NSString *idToken = user.authentication.idToken; // Safe to send to the server
        NSString *name = user.profile.name;
        NSString *email = user.profile.email;
        NSLog(@"Name: %@, User: %@, Token: %@, Email: %@",name, userId, idToken, email);
        // ...
    }
}

在这个 AppDelegate 方法中,我想从我的登录视图控制器调用一个方法:

-(void)onSuccessfulLogin{
    NSLog(@"On Successful Login");
    [self.navigationController pushViewController:[collectionViewController new] animated:YES];
}

我尝试了以下答案: 从应用程序委托调用 UIViewController 方法

想要从appdelegate调用ViewController的方法

并且调用了 NSLog,但从未推送过新的视图控制器......为什么会这样,我怎样才能让它工作?

如果这是你的应用程序委托,你没有 self.navigationController。您可能更改了NavigationController to something like UINavigationController *navigationController = [[UINavigationController alloc] init]的名称 您需要为委托类上的导航控制器设置@property。然后初始化导航控制器的位置

 UINavigationController *navigationController = [[UINavigationController alloc] init]`
self.navigationController = navigationController// You need this line.

//In your method
    [self.navigationController pushViewController:[collectionViewController new] animated:YES];

在 YourViewController.h 中声明您的 onSuccessLogin 方法(头文件)

在 (void)signIn:didSignInForUser:withError: 方法中,将下面的代码放在底部

if ([self.navigationController.viewControllers.lastObject respondsToSelector:@selector(onSuccessfulLogin)]) {
    [((YourViewController *)self.navigationController.viewControllers.lastObject) onSuccessfulLogin];
}
我一直

在想这个错误。您可以将 GDSignInDelegate 从 AppDelegate 移动到 viewcontroller.h。

然后,您可以简单地将 -(void)signIn: didSignInUser: 方法移动到您的 ViewController。你可以从那里调用你的方法!

最新更新