Ios 如何执行modalSegue?
我正在构建一个iOS应用程序。我已经在我的应用程序中集成了facebook登录并实现了modal segue 意味着当用户成功登录时,它将进入下一个视图 我面临的问题是,登录后我无法进入下一个视图。还有一件事我无法做到,当用户已经通过facebook登录到我的应用程序,并在关闭应用程序后返回时,它应该位于下一个ViewController,而不是登录屏幕上 情节提要流程是: 登录屏幕-->模式序列-->导航控制器-->下一步 视图控制器 这是我的代码:Ios 如何执行modalSegue?,ios,objective-c,iphone,uistoryboardsegue,ibaction,Ios,Objective C,Iphone,Uistoryboardsegue,Ibaction,我正在构建一个iOS应用程序。我已经在我的应用程序中集成了facebook登录并实现了modal segue 意味着当用户成功登录时,它将进入下一个视图 我面临的问题是,登录后我无法进入下一个视图。还有一件事我无法做到,当用户已经通过facebook登录到我的应用程序,并在关闭应用程序后返回时,它应该位于下一个ViewController,而不是登录屏幕上 情节提要流程是: 登录屏幕-->模式序列-->导航控制器-->下一步 视图控制器 这是我的代码: - (IBAction)fbLogin:(
- (IBAction)fbLogin:(id)sender {
[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
switch (state) {
case FBSessionStateOpen:
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (error) {
NSLog(@"error:%@",error);
} else {
// retrive user's details at here as shown below
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *FBuser, NSError *error) {
if (error) {
// Handle error
} else {
NSString *userName = [FBuser name];
NSLog(@"username===%@",userName);
NSLog(@"sesseion=%@",session);
}
}];
NSLog(@"FB user first name:%@",user.first_name);
userName=user.first_name;
NSLog(@"FB user last name:%@",user.last_name);
NSLog(@"FB user birthday:%@",user.birthday);
NSLog(@"FB user location:%@",user.location);
NSLog(@"FB user username:%@",user.username);
NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]);
NSLog(@"email id:%@",[user objectForKey:@"email"]);
NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n",
user.location[@"name"]]);
userImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", [user objectID]];
NSLog(@"image=%@",userImageURL);
}
[self performSegueWithIdentifier:@"afterLogin" sender:sender];
}];
break;
}
} ];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"afterLogin"]) {
PPla *image = [segue destinationViewController];
PPla *name = [segue destinationViewController];
name.proName = [NSString stringWithFormat:userName];
image.proImage = userImageURL;
}
}
-(iAction)fbLogin:(id)发件人{
[FBSession openActiveSessionWithReadPermissions:@[@“电子邮件”、“用户位置”、“用户生日”、“用户家乡”]
阿洛洛洛吉努伊:是的
completionHandler:^(FBSession*会话,FBSessionState状态,NSError*错误){
开关(状态){
案例FBSessionStateOpen:
[[FBRequest requestForMe]startWithCompletionHandler:^(FBRequestConnection*连接,NSDictionary*用户,NSError*错误){
如果(错误){
NSLog(@“错误:%@”,错误);
}否则{
//在此处检索用户详细信息,如下所示
[[FBRequest requestForMe]startWithCompletionHandler:^(FBRequestConnection*连接,NSDictionary*FBuser,NSError*错误){
如果(错误){
//处理错误
}否则{
NSString*用户名=[FBuser name];
NSLog(@“username==%@”,username);
NSLog(@“sesseion=%@”,会话);
}
}];
NSLog(@“FB用户名:%@”,用户名);
用户名=user.first\u name;
NSLog(@“FB用户姓氏:%@”,user.last_name);
NSLog(@“FB用户生日:%@”,user.birth);
NSLog(@“FB用户位置:%@”,user.location);
NSLog(@“FB用户用户名:%@”,user.username);
NSLog(@“FB用户性别:%@,[user objectForKey:@“性别”);
NSLog(@“电子邮件id:%@,[user objectForKey:@“电子邮件”);
NSLog(@“位置:%@,[NSString stringWithFormat:@“位置:%@\n\n”,
user.location[@“name”]];
userImageURL=[NSString stringWithFormat:@”https://graph.facebook.com/%@/图片?类型=大“,[用户对象ID];
NSLog(@“image=%@”,userImageURL);
}
[self-PerformsgueWithIdentifier:@“afterLogin”发件人:发件人];
}];
打破
}
} ];
}
-(void)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{
如果([[segue identifier]IsequalString:@“afterLogin”]){
PPla*图像=[segue destinationViewController];
PPla*名称=[segue destinationViewController];
name.proName=[NSString stringWithFormat:userName];
image.proImage=userImageURL;
}
}
像这样试试
将此行添加到.h文件中
@property(strong ,nonatomic) NSMutableDictionary *userinfo;
.m文件
add this `@synthesize userinfo`
- (IBAction)fbLogin:(id)sender {
[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
switch (state) {
case FBSessionStateOpen:
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (error) {
NSLog(@"error:%@",error);
} else {
// retrive user's details at here as shown below
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *FBuser, NSError *error) {
if (error) {
// Handle error
} else {
NSString *userName = [FBuser name];
NSLog(@"username===%@",userName);
NSLog(@"sesseion=%@",session);
}
}];
NSLog(@"FB user first name:%@",user.first_name);
[userinfo setValue: [FBuser name] forKey:@"fbusername"];
//add here all your value which you want
}
[self performSegueWithIdentifier:@"afterLogin" sender:sender];
}];
break;
}
} ];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSString *identifier = segue.identifier;
// NSLog(@"prepareForSegue:= %@", identifier);
if ([segue.identifier isEqualToString:@"afterLogin"]) {
[segue.destinationViewController setID:userinfo];
}
}
谢谢@Sport,我已经应用了你的代码,但是什么都没有发生。登录后我仍然在登录屏幕上。如果你需要更多信息,请告诉我。请检查-(void)prepareforsgue:(UIStoryboardSegue*)segue sender:(id)sender:(id)调用了sender还是没有设置正确的标识符yyes-(void)prepareforsgue:(UIStoryboardSegue*)segue sender:(id)调用发送方,但未调用-(void)setID:(NSMutableDictionary*)值,因为它位于当前未显示的下一个视图类中。-(void)setID:(NSMutableDictionary*)值;将此添加到.h文件中您的问题中缺少了很多重要信息。打印出来的结果是什么,它们是否有效?给出一个示例输出。我以前没有使用过facebook sdk,但代码对我来说很奇怪,看起来你两次调用同一个方法
[[fbRequestRequestForme]startWithCompletionHandler:^(FBRequestConnection*连接,NSDictionary*FBuser,NSError*错误){
,请验证这一切是否正确。它是否进入了prepareForSegue
方法?如果没有,距离有多远?最后,您的performsguewithidentifier
不在最后一个完成块内。很可能此代码在您的facebook查询完成之前运行。使用模式segue通常是为了提供popup、 通常情况下,它不会用于弹出导航控制器。除非您对模式有特殊需要,否则我建议您使用推送模式。@Simon我也应用了推送模式,但它不起作用。除此之外,我在我的评论中还提出了许多其他观点。请阅读并回复
-(void)setID:(NSMutableDictionary *)value;
{
// all your details here
NSLog(@"Got happy userinfo %@", value);
}