我使用此代码从目录中删除文件:
[ws performFileOperation: NSWorkspaceRecycleOperation source: @"/Users/user/path" destination: @"" files: [[_l_ArrayController selectedObjects] mutableArrayValueForKey: @"LName"] tag: 0];
[_l_ArrayController removeObjects:[_l_ArrayController selectedObjects]];
并且它工作得很完美,但如果我从_l_ArrayController中删除任何文件,并通过Finder及时删除文件,那么NSWorkspaceRecycleOperation
就不会删除文件。
例如:
我有一系列文件{一,二,三}并开始删除。如果我通过Finder及时删除文件“2”,则不会通过NSWorkspaceRecycleOperation
删除文件“3”。
答案 0 :(得分:3)
如果你没有意识到它是异步发生的,你可能会对这个函数的行为感到惊讶。该函数立即退出并移至程序中的下一个语句,并且循环操作稍后发生。如果你在循环操作之后得到的代码以某种方式依赖于文件消失的概念......你可能会感到惊讶。所以在这种情况下,你告诉NSWorkspace“这是要删除的文件数组。”然后在下一步中,将其中一个文件拉出来。然后进行回收操作; NSWorkspace说“让我们看看那个数组。”它找到一些文件并执行其操作。它不知道在它看起来之前曾经有过不同的文件。这有道理吗?你可以做几件事。一,给它一个数组的副本,然后修改原始。或者将您的代码放在completionHandler块中。这保证在循环操作完成之前不会执行(成功与否)。