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
我認爲這是一個很好的例子,如果有人可以寫一些東西,可以完成這兩個一起。
下面是測試:
拖動文本編輯應插入文本
拖放到搜索應該添加一個文件。
您的示例的最後一行:'[pasteboard writeObjects:[NSArray arrayWithObjects: fileURL,arrayWithObjects:noteItem,nil]];'甚至沒有有效的代碼('arrayWithObjects:noteItem'在參數列表中間);是一個錯字? – 2011-06-15 05:01:01
我正面臨同樣的問題 - 你有沒有找到解決方案@ sg1? – Frederik 2014-11-18 16:32:36