我需要使用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
...
...