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運行的線程時鎖定在其他方案中的作品,例如此方法。但是,在上面的代碼中,完成處理程序永遠不會被調用,因此鎖定永遠不會被釋放。如果我註釋掉所有的線程鎖定行,則調用完成處理程序。
我不知道如何解釋這種行爲。有什麼建議麼?