2012-04-20 3 views
1

파일을 삭제하지 마십시오 :NSWorkspaceRecycleOperation 내가 디렉토리에서 파일을 삭제하는이 코드를 사용

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

을하고 그것을 완벽했다,하지만 난 파인더를 통해 시간에 _l_ArrayController에서 모든 파일을 제거하는 경우, NSWorkspaceRecycleOperation이 삭제되지 않습니다 그 후에 파일이 있습니다. 예를 들어

:

내가 파일 {하나, 둘, 셋}의 배열을 삭제 시작합니다. Finder를 통해 파일 "2"를 삭제하면 파일 "3"은 NSWorkspaceRecycleOperation을 통해 삭제되지 않습니다.

+0

NSWorkspace가 잠긴 항목을 삭제하지 않는다고 생각합니다. 어떤 유형의 파일을 삭제 하시겠습니까? –

답변

2

비동기 적으로 발생한다는 것을 모르는 경우이 함수의 동작에 놀랄 수 있습니다. 이 함수는 즉시 종료되고 프로그램의 다음 명령문으로 이동하며 재활용 작업은 나중에 발생합니다. 재활용 작업 직후에 얻은 코드가 파일이 사라 졌다는 생각이 든다면 놀랄 것입니다. 따라서이 경우 NSWorkspace에 "삭제할 파일 배열은 다음과 같습니다." 그런 다음 다음 단계에서 해당 파일 중 하나를 꺼냅니다. 그런 다음 재활용 작업이 진행됩니다. NSWorkspace는 "배열을 살펴 봅시다"라고 말합니다. 일부 파일을 찾아 작업을 수행합니다. 그것이 보였던 직전에 다른 파일들이 있었음을 알지 못합니다. 그게 말이 되니? 당신이 할 수있는 몇 가지 일이 있습니다. 첫째, 배열 사본을주고 원본을 수정하십시오. 또는 코드를 completionHandler 블록에 넣으십시오. 이는 재활용 작업이 완료 될 때까지 (실행 여부에 관계없이) 실행되지 않도록 보장됩니다.

관련 문제