1

我使用此代码从目录中删除文件:

[ws performFileOperation: NSWorkspaceRecycleOperation source: @"/Users/user/path" destination: @"" files: [[_l_ArrayController selectedObjects] mutableArrayValueForKey: @"LName"] tag: 0];           
[_l_ArrayController removeObjects:[_l_ArrayController selectedObjects]];

它工作得很好,但是如果我通过Finder及时从_l_ArrayController中删除了任何文件,在 NSWorkspaceRecycleOperation此之后不要删除文件。

例如:

我有文件数组{一、二、三}并开始删除。如果我及时通过 Finder 删除了文件“二”,则文件“三”不会通过NSWorkspaceRecycleOperation.

4

1 回答 1

3

如果您没有意识到它是异步发生的,您可能会对这个函数的行为感到惊讶。该函数立即退出并移动到程序中的下一条语句,并且回收操作在一段时间后发生。如果你在回收操作之后得到的代码以某种方式依赖于文件已经消失的概念......你可能会感到惊讶。所以在这种情况下,你告诉 NSWorkspace “这是要删除的文件数组”。然后在下一步中,您将其中一个文件拉出。然后进行回收操作;NSWorkspace 说“让我们看看那个数组”。它找到一些文件并执行其操作。它不知道在它看起来之前曾经有不同的文件。这有意义吗?你可以做几件事。一,给它一个数组的副本,然后修改原始的。或者将您的代码放在 completionHandler 块中。保证在回收操作完成(成功与否)之前不会执行。

于 2012-07-12T02:18:57.630 回答