我是iOS开发人员,我尝试实施简单的Facebook Connect,但当用户登录时,我希望该应用自动更改视图。
在我的故事板中,我有一个嵌入在NavigationController中的FacebookLoginViewController
。然后我在FacebookLoginViewController
和UploadViewController
之间添加了一个segue(我让用户选择一张图片并将其上传到AWS S3)。
我检查了Facebook Sample以激励我。
我面临的问题是FacebookLoginViewController
和UploadViewController
之间的区别。此Segue具有以下标识符:LoginSuccessSegue
在AppDelegate
中,当会话状态发生变化时,会调用以下方法:
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error
在此方法中,当用户登录时,会调用另一种方法:userLoggedIn
现在,我想在这里做的是触发Segue在FacebookLoginViewController
和UploadViewController
之间执行推送转换。我必须从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];
}
这是有效的。
我试图搜索此错误,但我发现任何有用的信息。
你能告诉我我做错了什么,也许我该怎么做才能触发这种过渡?
干杯, 马克西姆
答案 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];
}
编辑:
您想导航到图片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];
}