2010-01-04 10 views
8

Finder에서 내 애플리케이션으로 드래그/드롭 한 모든 파일의 URL을 가져와야합니다.Mac OS X 10.5의 Finder에서 여러 파일 드래그/드롭을 처리하려면 어떻게합니까?

나는 10.6에서 실행되는 코코아 응용 프로그램을 가지고 있습니다.이 응용 프로그램은 페이스트 보드의 여러 항목을 처리하는 새로운 10.6 NSPasteboard API를 사용하여이 작업을 수행합니다. 이 앱을 10.5로 백 포트하려고합니다. 10.5에서 어떻게 처리합니까?

나는 다음과 같은 일을 할 경우에, 나는 첫 번째 URL 얻을 :

NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil]; 
    NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
    if (bestType != nil) { 
     NSURL *url = [NSURL URLFromPasteboard:pboard]; 
    }   

답변

6

IKImageKit programming topics 윤곽 때문에 (의역)처럼 할 수있는 방법 :

NSData *data = [pasteboard dataForType:NSFilenamesPboardType]; 
    NSArray *filenames = [NSPropertyListSerialization 
     propertyListFromData:data 
      mutabilityOption:kCFPropertyListImmutable 
         format:nil 
      errorDescription:&errorDescription]; 

여기 참조하십시오 : Image Kit Programming Guide: Supporting Drag and Drop

9

여러 파일 이름을 얻기 쉽다 :

  1. NSFilenamesPboardType에 대한보기를 등록 (동안 10.5 multiple URLs is not 얻는)
  2. performDragOperation:에서 다음을 수행하여 파일 경로의 배열을 가져옵니다.

NSPasteboard* pboard = [sender draggingPasteboard]; 
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType]; 
+0

반환되는 NSArray는 NSURL *이 아닙니다. NSString *입니다. –

+0

지적 해 주셔서 고맙습니다. (필자는 'urls'에서 'filenames'로 배열의 이름을 변경하여 내용이 NSURL * 유형이 아님을 분명히했습니다.) –

0

어떻게이 10.5 [A 대지에 여러 항목]을 처리합니까?

Pasteboard Manager을 사용해보십시오.

까다로운 부분은 드롭 처리입니다. 즉, 이미 생성 된 NSPasteboard를 받고 있으며 NSPasteboard 개체와 PasteboardRef 사이를 변환 할 수있는 방법이 없습니다. NSPasteboard에 name을 요청한 다음 PasteboardCreate에 동일한 이름을 전달하면 작동하지 않을 수 있습니다.

1

NSURLPboardType는 하나 개의 URL을 처리합니다.

파일 목록을 가져 오려면 NSFilenamesPboardType에서 NSArray를 만들어야합니다.

Apple의 docs on drag and drop은 오래된 물건 일지라도 꽤 좋습니다.