2011-06-14 1 views
1

10.11의 새로운 페이스트 보드 API는 UTI를 둘러 본 후에 제대로 작동하는 것으로 보이지만 가능한 상황을 발견했습니다. 파일 드래그와 함께 여러 데이터 유형을 선언한다면 어떨까요?파일, rtfd 및 사용자 정의 유형 (Mac OS X 10.6)을 포함한 여러 유형의 페이스트 보드

새로운 대지가 작동하는 방식을 보려면 setString, setData, setPropertyList 또는 writeObjects를 사용하여 데이터를 넣습니다. 첫 번째 3에서는 수신기가 원하는 표현을 선택할 수 있도록 UTI를 미리 지정해야합니다.

마지막 하나 - writeObjects - NSPasteboardWide와 호환되는 객체 배열 (예 : NSPasteboardItem 클래스)이 필요합니다.

문제는 Finder가 페이스트 보드에 추가 된 모든 URL을 리터럴 URL로 해석하기 때문에 파일을 드래그하는 대신 파일에 URL을 생성한다는 것입니다.

URL에 대한 NSPasteboardItem을 만드는 방법은 없습니다 (찾을 수는 없습니다). 이 헤더 (머리글에서) :

APPKIT_EXTERN NSString *NSFilenamesPboardType; //Deprecated 
// Use -writeObjects: to write file URLs to the pasteboard 

그러나 URL을 NSPasteboard 항목과 혼합하면 결과가 작동하지 않습니다.

NSPasteboardItem *noteItem = [[[NSPasteboardItem alloc] init] autorelease]; 
[noteItem setString:theString forType:NSPasteboardTypeString]; 

//Here is the problem: you can only have one or the other, not both. 
[pasteboard writeObjects:[NSArray arrayWithObjects:noteItem, nil]]; //A 
[pasteboard writeObjects:[NSArray arrayWithObject:fileURL]]; //B 
// A or B will work but not both 
[pasteboard writeObjects:[NSArray arrayWithObjects: 
fileURL, noteItem, nil]]; //Will not work 

누군가가이 두 가지를 모두 달성 할 수있는 글을 쓸 수있는 훌륭한 사례라고 생각합니다. 여기

테스트입니다 : 텍스트 편집기에

  • 드래그 파일을 추가해야합니다 텍스트를 찾기에

  • 드래그를 삽입해야합니다.

+0

인자 목록의 중간에있는 유효한 코드 ('pasteWriteObjects : noteItem')도 유효하지 않습니다.); 그건 오타예요? –

+0

나는 똑같은 질문에 직면 해있다. 당신은 @ sg1 해결책을 찾았나요? – Frederik

답변

2

writeObjects : 유일한 방법은 아닙니다. 당신은 또한 사용할 수 있습니다

당신은 또한 NSURL Additions (+URLFromPasteboard:-writeToPasteboard:)를 사용할 수있는 기회를 가질 수있다.

+0

NSURL 링크는 404 페이지로 이동합니다. 링크를 수정하거나 거기에있는 내용을 더 잘 요약 해 주시겠습니까? –

+0

@AbhiBeckert done. 고맙습니다. – cocoafan