1

ディレクトリからファイルを削除するためにこのコードを使用しました:

[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ファイルを削除しないでください。

例えば:

ファイル{1、2、3}の配列があり、削除を開始します。時間内に Finder を介してファイル「2」を削除した場合、ファイル「3」は削除されませんNSWorkspaceRecycleOperation

4

1 に答える 1

3

この関数が非同期で行われていることを認識していない場合、この関数の動作に驚くかもしれません。関数はすぐに終了し、プログラム内の次のステートメントに移動し、しばらくしてからリサイクル操作が行われます。リサイクル操作の直後に得られたコードが、ファイルがなくなったという考えに何らかの形で依存している場合...あなたは驚くかもしれません. この場合、NSWorkspace に「削除するファイルの配列は次のとおりです」と伝えます。次のステップでは、それらのファイルの 1 つを取り出します。そして、リサイクル操作が行われます。NSWorkspace は、「その配列を見てみましょう」と言います。いくつかのファイルを見つけて、その操作を実行します。見る直前に別のファイルがあったことを知りません。それは理にかなっていますか?できることがいくつかあります。1、配列のコピーを与えてから、オリジナルを変更します。または、コードを completionHandler ブロックに入れます。これは、リサイクル操作が (成功するかどうかにかかわらず) 完了するまで実行されないことが保証されています。

于 2012-07-12T02:18:57.630 に答える