Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何执行modalSegue?_Ios_Objective C_Iphone_Uistoryboardsegue_Ibaction - Fatal编程技术网

Ios 如何执行modalSegue?

Ios 如何执行modalSegue?,ios,objective-c,iphone,uistoryboardsegue,ibaction,Ios,Objective C,Iphone,Uistoryboardsegue,Ibaction,我正在构建一个iOS应用程序。我已经在我的应用程序中集成了facebook登录并实现了modal segue 意味着当用户成功登录时,它将进入下一个视图 我面临的问题是,登录后我无法进入下一个视图。还有一件事我无法做到,当用户已经通过facebook登录到我的应用程序,并在关闭应用程序后返回时,它应该位于下一个ViewController,而不是登录屏幕上 情节提要流程是: 登录屏幕-->模式序列-->导航控制器-->下一步 视图控制器 这是我的代码: - (IBAction)fbLogin:(

我正在构建一个iOS应用程序。我已经在我的应用程序中集成了facebook登录并实现了modal segue 意味着当用户成功登录时,它将进入下一个视图

我面临的问题是,登录后我无法进入下一个视图。还有一件事我无法做到,当用户已经通过facebook登录到我的应用程序,并在关闭应用程序后返回时,它应该位于下一个ViewController,而不是登录屏幕上

情节提要流程是:

登录屏幕-->模式序列-->导航控制器-->下一步 视图控制器

这是我的代码:

- (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);

}