0

iOS初学者在这里。我正在使用以下代码将我的 facebook accessToken 和 expirationDate 保存在 NSUserDefaults 中:

facebook = [[Facebook alloc] initWithAppId:@"225083222506272"];
    [facebook authorize:nil delegate:self];
    NSString *access=[facebook accessToken];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:access, @"accessToken",[facebook expirationDate], @"expirationDate",nil];
    [defaults registerDefaults:appDefaults];

我正在尝试在稍后的调用中检索 accessToken 和 expirationDate:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *access=[defaults valueForKey:@"accessToken"];
    NSDate *date=[defaults objectForKey:@"expirationDate"];
    [facebook fbDialogLogin:access expirationDate:date];

但访问和日期为空。我究竟做错了什么?

4

1 回答 1

2

这里的代码不是同步的。这意味着它在调用 后不会阻塞[facebook authorize:nil delegate:self];。相反,您应该实现fbDidLogin委托方法,以便在用户实际成功登录时得到通知。此时,检索访问令牌并将其保存为用户默认值。

这是部分示例:

- (void)userClickedFacebookLogin {
    [facebook authorize:nil delegate:self]; // delegate is self
}

// Delegate method that you should implement to get notified
// when user actualy logs in.
- (void)fbDidLogin {
    // now get the access token and save to user defaults
    NSString *access = [facebook accessToken];
    // ..
}

还要确保具有上述代码的类FBSessionDelegate至少实现了协议。

@interface MyClass <FBSessionDelegate> {

}

@end

查看DemoApp示例,特别是DemoAppViewControllerFacebook 中的课程,以获得更好的想法。

于 2011-05-17T01:25:07.313 回答