Cocoa 粘贴板上有多种类型,包括文件、rtfd和自定义类型(Mac OS X 10.6)
10.6中新的pasteboard api在您了解UTIs后似乎工作得很好,但我遇到了一个我无法解决的问题:如果您在文件拖动中声明多个数据类型怎么办 查看新粘贴板的工作方式,可以使用setString、setData、setPropertyList或writeObject将数据放在其上。前3个要求您提前指定UTI,以便接收方可以选择它想要的表示 最后一个—WriteObject—需要一个NSPasteboardWriting兼容对象数组,例如便利类NSPasteboardItem 问题是,查找程序将添加到粘贴板的任何url解释为文本url,因此它不会拖动文件,而是创建指向该文件的url 没有办法(我可以找到)为URL创建NSPasteboardItem。这将留下以下内容(从页眉): 但是,如果将URL与NSPasteboard项混合使用,则结果不起作用Cocoa 粘贴板上有多种类型,包括文件、rtfd和自定义类型(Mac OS X 10.6),cocoa,drag-and-drop,nspasteboard,Cocoa,Drag And Drop,Nspasteboard,10.6中新的pasteboard api在您了解UTIs后似乎工作得很好,但我遇到了一个我无法解决的问题:如果您在文件拖动中声明多个数据类型怎么办 查看新粘贴板的工作方式,可以使用setString、setData、setPropertyList或writeObject将数据放在其上。前3个要求您提前指定UTI,以便接收方可以选择它想要的表示 最后一个—WriteObject—需要一个NSPasteboardWriting兼容对象数组,例如便利类NSPasteboardItem 问题是,查找程
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
我认为如果有人能写出一个能同时完成这两个问题的例子,我会认为这是一个很好的例子。
以下是测试:
- 拖动到文本编辑应插入文本
- 拖动到Finder应该添加一个文件
- WriteObject:不是唯一的方法。您还可以使用:
对于
NSURL
,您还可以使用(+URLFromPasteboard:
和-writeToPasteboard:
)。示例的最后一行:[pasteboard WriteObject:[NSArray arrayWithObjects:fileURL,arrayWithObjects:noteItem,nil]代码>甚至不是有效的代码(<代码> ArayOffObjs:NoditIt/Cuth>在参数列表中间);这是一个打字错误吗?我面临着同样的问题-你有没有找到@sg1的解决方案?你的NSURL链接指向404页面。你能修复这个链接或者更好地总结一下有什么吗?
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