2011-06-14 18 views
1

10.6中的新粘貼板api似乎在您將頭部纏繞在UTI上時運行良好,但我遇到了可以't破解:如果你聲明多個數據類型與文件拖動一起會怎麼樣?包含文件,rtfd和自定義類型的粘貼板上的多種類型(Mac OS X 10.6)

查看新的粘貼板的工作方式,使用setString,setData,setPropertyList或writeObjects將數據放在上面。前3個要求您提前指定UTI,以便接收方可以選擇所需的表示。

最後一個 - writeObjects - 需要一個NSPasteboardWriting兼容對象數組,例如便利類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

您的示例的最後一行:'[pasteboard writeObjects:[NSArray arrayWithObjects: fileURL,arrayWithObjects:noteItem,nil]];'甚至沒有有效的代碼('arrayWithObjects:noteItem'在參數列表中間);是一個錯字? – 2011-06-15 05:01:01

+0

我正面臨同樣的問題 - 你有沒有找到解決方案@ sg1? – Frederik 2014-11-18 16:32:36

回答