如何同步完成[NSWorkspace recycleURLs]完成

时间:2013-10-29 09:38:32

标签: cocoa

我需要使用NSWorkspace recycleURLs在垃圾箱上移动文件,但我必须等待完成,将所有代码放在completionHandler中并不是那么简单,主要是因为包含对recycleURLs的调用的方法必须返回一个值。

我发现了一种实现结果的肮脏方式,但我知道是否存在更好的解决方案 我的解决方案使用条件变量和runloop

代码在一个独立的线程中运行,而不是在主线程

中运行
__block BOOL waitCompletion = YES;
 void (^myCompletionHandler)(NSDictionary *newURLs, NSError *error) =
  ^(NSDictionary *newURLs, NSError *recycleError) {
      // do some stuff and before exits from method change waitCompletion value
        waitCompletion = NO;
};
[[NSWorkspace sharedWorkspace] recycleURLs:myURLToDelete
                 completionHandler:myCompletionHandler];
// loop until completionHandler finishes
while (waitCompletion && CFRunLoopRunInMode(kCFRunLoopDefaultMode, 2.0, true)) {
    ; //nop
}

// we can continue after recycleURLs
...
...

0 个答案:

没有答案
相关问题