从AppDelegate触发segue

时间:2014-04-16 06:13:02

标签: objective-c segue facebook-ios-sdk

我是iOS开发人员,我尝试实施简单的Facebook Connect,但当用户登录时,我希望该应用自动更改视图。

在我的故事板中,我有一个嵌入在NavigationController中的FacebookLoginViewController。然后我在FacebookLoginViewControllerUploadViewController之间添加了一个segue(我让用户选择一张图片并将其上传到AWS S3)。

enter image description here

我检查了Facebook Sample以激励我。

我面临的问题是FacebookLoginViewControllerUploadViewController之间的区别。此Segue具有以下标识符:LoginSuccessSegue

AppDelegate中,当会话状态发生变化时,会调用以下方法: - (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error

在此方法中,当用户登录时,会调用另一种方法:userLoggedIn

现在,我想在这里做的是触发Segue在FacebookLoginViewControllerUploadViewController之间执行推送转换。我必须从AppDelegate开始,因为它在这里检查会话状态。

我试图实例化FacebookLoginViewController并调用我已定义的方法来触发segue。

AppDelegate.m

// Show the user the logged-in UI
- (void)userLoggedIn
{
    // Switch view to pick image
    FacebookLoginViewController *LoginController = [[FacebookLoginViewController alloc] init];
    [LoginController successLoginTransition];
}

FacebookLoginViewController.m

-(void)successLoginTransition
{
    [self performSegueWithIdentifier:@"LoginSuccessSegue" sender:self];
}

但是这样做我最终得到以下错误:

  

因未捕获的异常终止应用' NSInvalidArgumentException',原因:' Receiver()没有带标识符的segue' LoginSuccessSegue''


为了确保Segue正常运行,我在FacebookLoginViewController中创建了一个调用以下方法的按钮:

-(IBAction)testSegue:(id)sender
{
    [self performSegueWithIdentifier:@"LoginSuccessSegue" sender:self];
}

这是有效的。


我试图搜索此错误,但我发现任何有用的信息。

你能告诉我我做错了什么,也许我该怎么做才能触发这种过渡?

干杯, 马克西姆

1 个答案:

答案 0 :(得分:1)

请不要alloc init UIViewController,因为您使用的是故事板。

更改

- (void)userLoggedIn
{
    // Switch view to pick image
    FacebookLoginViewController *LoginController =
                                          [[FacebookLoginViewController alloc] init];
    [LoginController successLoginTransition];
}

- (void)userLoggedIn
{
    // Switch view to pick image
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" 
                                                         bundle:nil];
    FacebookLoginViewController *LoginController = 
                 [storyboard instantiateViewControllerWithIdentifier:@"FbLoginView"];
    [LoginController successLoginTransition];
}

enter image description here

编辑:

您想导航到图片Picker,不需要让LoginController推送一个segue。你可以直接这样做:

- (void)userLoggedIn
{
    // Switch view to pick image
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    pickImageViewController *LoginController = [storyboard instantiateViewControllerWithIdentifier:@"pickImageView"];
    [(UINavigationController*)self.window.rootViewController pushViewController:LoginController animated:NO];
}