Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 粘贴板上有多种类型,包括文件、rtfd和自定义类型(Mac OS X 10.6)_Cocoa_Drag And Drop_Nspasteboard - Fatal编程技术网

Cocoa 粘贴板上有多种类型,包括文件、rtfd和自定义类型(Mac OS X 10.6)

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 问题是,查找程

10.6中新的pasteboard api在您了解UTIs后似乎工作得很好,但我遇到了一个我无法解决的问题:如果您在文件拖动中声明多个数据类型怎么办

查看新粘贴板的工作方式,可以使用setString、setData、setPropertyList或writeObject将数据放在其上。前3个要求您提前指定UTI,以便接收方可以选择它想要的表示

最后一个—WriteObject—需要一个NSPasteboardWriting兼容对象数组,例如便利类NSPasteboardItem

问题是,查找程序将添加到粘贴板的任何url解释为文本url,因此它不会拖动文件,而是创建指向该文件的url

没有办法(我可以找到)为URL创建NSPasteboardItem。这将留下以下内容(从页眉):

但是,如果将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
我认为如果有人能写出一个能同时完成这两个问题的例子,我会认为这是一个很好的例子。 以下是测试:

  • 拖动到文本编辑应插入文本

  • 拖动到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