IOS6 FB sdk startForMeWithCompletionHandler如何将结果设置为函数返回变量

时间:2013-05-16 20:27:53

标签: facebook facebook-ios-sdk

我正在尝试获取简单的当前用户信息并将其作为参数从函数返回。从阅读中我了解到我需要使用startForMeWithCompletionHandler方法。大。

在使用Facebook进行身份验证后,我尝试通过调用startForMeWithCompletionHandler方法来调用API。但是,块已执行但它从未作为方法返回参数返回。为什么呢?

这是我打电话的方法:

-(id<FBGraphUser>) getLoggedInUserdata
{
    __block id<FBGraphUser> userInfo;
    if(FBSession.activeSession.isOpen)
    {
        NSLog(@"Session is open");
    }

    [FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id<FBGraphUser> userInfoResult, NSError *error) {
        if(FBSession.activeSession.isOpen)
        {
            if(!error)
            {
                userInfo = userInfoResult;
            }
        }
    }];

    return userInfo;
}
来自MainViewController的

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.title = @"Facebook Sample app";
    httpClient = [[FBCHttpClient alloc] init];

}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if(FBSession.activeSession.isOpen)
    {
        id<FBGraphUser> fbGraphUser = httpClient.getLoggedInUserdata;
        NSLog(@"%@",[fbGraphUser name]);
    }

}

我在成功通过Facebook验证后调用它,FBSession.activeSession.isOpen为真。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

startForMeWithCompletionHandler方法是异步的,因此无论何时调用它都会被调用,但是在代码完成首先执行之前它将不会执行。