0

我真的被这个问题困住了,如果有人能指出我正确的方向,我将不胜感激......

我正在构建一个带有用于主导航的选项卡栏的 iOS 应用程序。

用户需要注册/登录才能看到主屏幕和标签栏。

用户可以使用 Facebook Connect 登录和注册。

该应用程序与我们自己的 API 进行通信。

目前...当 UITabBarController 的初始视图被加载时,它将检查是否存在当前用户,如果没有,将显示登录屏幕。

if (sessionID == (id)[NSNull null] || sessionID.length == 0){
    NSLog(@"session ID was null");
    SHOW_SIGN_IN_SCREEN;
}

#define SHOW_SIGN_IN_SCREEN SignInController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SignInScreen"];\
[self presentViewController:controller animated:NO completion:nil];

从登录屏幕...用户可以触摸“使用 Facebook 登录”按钮或创建一个与注册屏幕相连的新帐户。注册屏幕有一个供用户填写的表格,或者他们可以点击“使用 Facebook 注册”按钮以使用 Facebook 图表提供的他们的 Facebook 详细信息创建一个帐户。

Facebook 回调都由应用程序委托处理,这是我遇到的问题。

API 不关心从应用程序发送的用户凭据是针对新用户还是现有用户。在任何一种情况下,API 都会返回一个有效的会话 ID 以供应用程序继续。

一旦 API 做出响应,应用程序委托应该将用户返回到主标签栏视图控制器,这是我卡住的地方。

目前,我在 AppDelegate 中有这个

// app delegate
-(void)segueToMainTabController
{
    NSLog(@"segueToMainTabController");
    SignInController *controller = (SignInController *)[self.window.rootViewController presentedViewController];
    [controller segueToWelcomeScreen];
}

// sign in controller 
-(void)segueToWelcomeScreen
{
    NSLog(@"segueToWelcomeScreen");
    [self performSegueWithIdentifier:@"SignInToMainTabBar" sender:self];
}

哪个调用但没有执行 segue ......

谁能告诉我为什么不执行这个segue?

谢谢

4

1 回答 1

0

我有一个应用程序,我需要在我的 AppDelegate 中劫持初始视图,所以也许你可以做类似的事情。根据您的情况,也许可以尝试在您的application:didFinishLaunchingWithOptions:

if (sessionID == (id)[NSNull null] || sessionID.length == 0){
    // whatever you need to do to initialize for the login screen
    // you should make the login view the initial view in your storyboard
}
else { // hijack the initial view to show the tab bar   
    UIStoryboard *storyboard = self.window.rootViewController.storyboard;
    MyTabViewController *tabViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyTabViewController"];

    self.window.rootViewController = tabViewController;
    [self.window makeKeyAndVisible];
}

希望有帮助。

于 2012-05-30T00:35:43.523 回答