我正在将文件发送到垃圾箱
[NSWorkSpace recycleURLs: myArrayOfOneNsurl
completionHandler: NIL]
myArrayOfOneNsurl
是使用单个NSURL
arrayWithObject:
创建的NSArray
,该是为具有 fileURLWithPath:isDirectory:
的绝对文件路径创建的。
判断它是否成功的正常方法是使用completionHandler
,然后检查第二个参数(NSError
)是否NIL
,这意味着成功。
没有这个回调,有什么办法可以检查成功吗?目前我在调用这个后设置了一个循环,以检查文件是否存在,如果 1 秒过去并且仍然存在,我声明失败。我想知道我是否将NIL
设置为第二个参数以recycleURLs:completionHandler:
它是否会阻止直到该过程完成(无论是否成功)?在我的测试中,第一次检查总是发现文件不再位于其原始位置(意味着它已被丢弃),但我不确定我的计算机是否只是超快,或者它真的阻塞直到文件操作完成。
要删除单个文件或目录,可以改用NSFileManager trashItemAtURL
。它是同步的,因此您可以避免完成回调带来的麻烦。
NSError * error = nil;
[[NSFileManager defaultManager] trashItemAtURL:url resultingItemURL:nil error:&error];
此 API 是异步的。将NULL
作为completionHandler
传递仅意味着您对结果不感兴趣。知道操作何时完成以及是否成功的唯一方法是使用 completionHandler
.
如果你真的需要让它同步,你可以使用以下方法(尽管我不建议这样做):
__block BOOL recycleFinished = NO;
__block NSError *recycleError = nil;
[[NSWorkspace sharedWorkspace] recycleURLs:myArrayOfOneNsurl
completionHandler:^(NSDictionary<NSURL *,NSURL *> * _Nonnull newURLs, NSError * _Nullable error) {
recycleFinished = YES;
recycleError = error;
}];
while (!recycleFinished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:.5]];
}
// access recycleError
NSLog(@"%@", recycleError);