2014-06-29 140 views
2

我想要同步调用Facebook的sdk。我知道这不被推荐,但这只是一个更大的初始化的一部分,它已经在单独的线程上运行,而主线程正在显示“请稍候”屏幕。
我曾尝试以下代码:Facebook IOS sdk调用同步

NSConditionLock *threadLock = [[NSConditionLock alloc] initWithCondition:101]; 
    [FBSession openActiveSessionWithReadPermissions:@[@"public_profile"] 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, FBSessionState state, NSError *error) { 
     NSLog(@"Completionhandler called"); 
     [threadLock lock]; 
     [threadLock unlockWithCondition:100]; 
    }]; 
    NSLog(@"Waiting for unlock"); 
    [threadLock lockWhenCondition:100]; 
    [threadLock unlock]; 
    NSLog(@"Unlocked"); 

经由dispatch_async运行的线程时锁定在其他方案中的作品,例如此方法。但是,在上面的代码中,完成处理程序永远不会被调用,因此锁定永远不会被释放。如果我注释掉所有的线程锁定行,则调用完成处理程序。
我不知道如何解释这种行为。有什么建议么?

回答

0

我想完成处理程序将在同一线程上被调用,因此init方法返回并进入threadlock,并从被称为该线程锁定完成处理了。