我正在使用
将文件发送到垃圾箱[NSWorkSpace recycleURLs: myArrayOfOneNsurl
completionHandler: NIL]
myArrayOfOneNsurl
是使用NSArray
创建的arrayWithObject:
NSURL
为fileURLWithPath:isDirectory:
的绝对文件路径创建的。{/ p>
判断它是否成功的正常方法是使用completionHandler
,然后检查第二个arg(NSError
)是否为NIL
,这意味着成功。
无论如何没有这个回调来检查成功吗?目前我在调用它之后设置了一个循环,检查文件是否存在,如果1秒已经过去且它仍然存在,我声明失败。我想知道我是否将NIL
作为第二个arg设置为recycleURLs:completionHandler:
它是否阻止该过程完成(无论成功与否)?在我的测试中,第一次检查总是发现文件不再位于其原始位置(意味着它已被删除),但我不确定我的计算机是否超级快,或者它确实在文件操作完成之前阻塞
答案 0 :(得分:2)
要废弃单个文件或目录,您可以改用NSFileManager trashItemAtURL
。它是同步的,因此您可以通过完成回调来避免麻烦。
NSError * error = nil;
[[NSFileManager defaultManager] trashItemAtURL:url resultingItemURL:nil error:&error];
答案 1 :(得分:1)
此API是异步的。将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);
。
如果你真的需要让它同步,你可以使用以下方法(虽然我不建议这样做):
{{1}}