以异步模式获取 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
。实际操作已经是异步的了。
我正在尝试使用以下代码获取 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
。实际操作已经是异步的了。