以异步模式获取 class 属性中的 Dropbox 元数据

Get Dropbox metadata in class attribute in async mode

我正在尝试使用以下代码获取 Dropbox dir 的元数据,调用 loadMetadata Dropbox API 并希望在数据进入时调用 callback (loadedMetadata)设备。这是代码:

_semaphore = dispatch_semaphore_create(0);

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
        NSLog(@"loadMetadata() in async block");

        [self.restClient loadMetadata:@"/"];
});


dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER); 

如您所见,我在异步模式下调用,以在一个 属性 中获取元数据,然后在另一个方法中 return 中获取元数据。我在 loadedMetadata 回调中进行以下调用:

    dispatch_semaphore_signal(_semaphore);

很好,这里的问题是从未调用 loadedMetadata 回调。我不知道为什么,但我在 loadedMetadata 中输入的跟踪从未打印出来并且 application is freeze (等待 loadedMetadata 信号)。我以DISPTACH_TIME_FOREVER为例,请不要看你的意思。

来自https://www.dropbox.com/developers/core/start/ios

Make sure you call DBRestClient methods from the main thread or a thread that has a run loop. Otherwise the delegate methods won't be called.

您应该从主线程调用 loadMetadata。实际操作已经是异步的了。