【问题标题】:How to send facebook user information into another view controller?如何将 facebook 用户信息发送到另一个视图控制器?
【发布时间】:2014-09-19 02:38:45
【问题描述】:

在用户通过 Facebook 登录我的应用程序后,我正在尝试保存用户名和用户电子邮件。 我已经设置了一个 segue 将信息从登录视图控制器传递到视图控制器,我计划将用户字符串和其他一些字符串保存到我的 sqlite 数据库中。 当我在目标视图控制器中运行我的应用程序并尝试将所有数据插入 sqlite 时,我收到一个错误,提示 userName 和 userEmail 是 nil 字符串,因此我的数据没有被保存。我已经正确设置了segue;合成,附加属性。但在我看来,问题可能在于我如何检索数据。帮助将不胜感激!提前谢谢!

-(void)prepareForSegue:(UIStoryboardSegue *)segue user:(id<FBGraphUser>)user sender:(id)sender{
    if([segue.identifier isEqualToString:@"loginInfo"]) {
        NSString *name = user.name;
        NSString *email = [user objectForKey:@"email"];
        ViewController *vc = (ViewController *)[segue destinationViewController];
        vc.userName = name;
        vc.userEmail = email;
        NSLog(@"user data is being prepared to segue");
    }
}

【问题讨论】:

  • 我认为“用户”是来自 facebook 的用户,无论是谁在我的应用程序上登录 facebook。我认为 segue 工作正常,但由于某种原因,字符串被返回为 nil,所以我猜我在被 segue 之前没有正确保存字符串。

标签: ios objective-c xcode facebook sqlite


【解决方案1】:

你使用了 -(void)prepareForSegue:(UIStoryboardSegue *)segue user:(id)user sender:(id)sender

UIViewController 类中没有这样的segue 展开方法。而不是那个使用 -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if([segue.identifier isEqualToString:@"loginInfo"]) {
        NSString *name = user.name;
        NSString *email = [user objectForKey:@"email"];
        ViewController *vc = (ViewController *)[segue destinationViewController];
        vc.userName = name;
        vc.userEmail = email;
        NSLog(@"user data %@, email %@",name,email);
     }
}

要获取用户信息,您需要实现 facebook 委托。

- (void)meRequestResult:(id)result WithError:(NSError *)error
{
    NSLog(@"result %@",result );

    if ([result isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *dictionary;
        if([result objectForKey:@"data"])
            dictionary = (NSDictionary *)[(NSArray *)[result objectForKey:@"data"] objectAtIndex:0];
        else
            dictionary = (NSDictionary *)result;


        email = [dictionary valueForKey:@"email"];
        fName = [dictionary valueForKey:@"first_name"];
        lName = [dictionary valueForKey:@"last_name"];

     }
}

【讨论】:

  • 如果我删除 user:(id)user,user.name 将成为未声明的标识符,那么如何从 facebook 登录返回数据以便保存?
  • 在 .h 文件中声明实例变量 FBGraphUser *fbUser。并在 facebook 委托中将 FBGraphUser 数据对象保存在 fbUser 中。然后,您将能够在 .m 文件的任何方法中访问 fbUser 对象。如果有帮助,请接受答案。
  • 所以 FBGraphUser 不是一个类,它是一个协议,我已经将它添加到我的类中,那么我应该声明什么?
  • 那你需要想办法访问fb用户名和emailID。你必须去developers.facebook.com
  • 我一直在阅读文件,但我仍然感到困惑。我已经登录并请求许可。我的控制台显示电子邮件和用户名已被检索,但我无法存储它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2012-05-29
  • 1970-01-01
相关资源
最近更新 更多