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];

ただし、アクセスと日付はnullです。私は何が間違っているのですか?

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 に答える