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