【问题标题】:Facebook IOS sdk calling synchronousFacebook IOS sdk调用同步
【发布时间】:2014-06-29 23:22:15
【问题描述】:

我正在尝试同步调用 facebook 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 运行线程时。然而,在上面的代码中,completionhandler 永远不会被调用,因此锁永远不会被释放。如果我注释掉所有线程锁行,则会调用完成处理程序。
我不知道如何解释这种行为。有什么建议吗?

【问题讨论】:

    标签: ios objective-c multithreading facebook-ios-sdk


    【解决方案1】:

    我认为完成处理程序将在同一个线程上调用,因此 init 方法返回并进入线程锁,并锁定完成处理程序,使其无法在该线程上被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2015-06-29
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多