2014-06-29 97 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,並從被稱爲該線程鎖定完成處理了。