objective-c – 为什么NSPasteboard的-types不返回包含的NSPasteboardItem的-types的并集?

objective-c – 为什么NSPasteboard的-types不返回包含的NSPasteboardItem的-types的并集?,第1张

概述NSPasteboard的-types文档如下: Return Value An array of NSString objects containing the union of the types of data declared for all the pasteboard items on the receiver. The returned types are listed in the NSPasteboard的-types文档如下:

Return Value

An array of Nsstring objects
containing the union of the types of
data declared for all the pasteboard
items on the receiver. The returned
types are Listed in the order they
were declared.

尽管如此,我有一个只有一个NSPasteboardItem的NSPasteboard,[pboard types]返回的类型比[item types]返回的类型多.有谁能解释一下?

这里有一些证明问题的代码:

- (BOol)performDragOperation:(ID <NSDraggingInfo>)sender {    NSPasteboard *pboard = [sender draggingPasteboard];    // Prove that there's only one item    if ([[pboard pasteboardItems] count] > 1)        return NO;    for (Nsstring* type in [pboard types])        NSLog(@"Pasteboard type: %@",type);    NSPasteboardItem* item = [[pboard pasteboardItems] objectAtIndex:0];    for (Nsstring* type in [item types])        NSLog(@"Item type: %@",type);    return NO; // Ignore for example}

产量

当我从Safari拖动链接时,我得到以下输出:

Pasteboard type: dyn.ah62d4rv4gu8zs3pcnzme2641rf4guzdmsv0gn64uqm10c6xenv61a3kPasteboard type: WebURLsWithTitlesPboardTypePasteboard type: dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwuPasteboard type: Apple URL pasteboard typePasteboard type: public.urlPasteboard type: CorePasteboardFlavorType 0x75726C20Pasteboard type: public.url-namePasteboard type: CorePasteboardFlavorType 0x75726C6EPasteboard type: public.utf8-plain-textPasteboard type: NsstringPboardTypeItem type: dyn.ah62d4rv4gu8zs3pcnzme2641rf4guzdmsv0gn64uqm10c6xenv61a3kItem type: dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwuItem type: public.urlItem type: public.url-nameItem type: public.utf8-plain-text

狂野的猜测

看起来[item types]基本上显示的类型与[pboard types]相同,但只有UTI版本.由于[pboard类型]似乎是将UTI类型与相应的其他类型(?)类型交错,因此它基本上是一个映射…

我可以通过简单地将UTI用于我想要的数据格式来忽略这个问题,但我正在寻找WebURLsWithTitlesPboardType(对应于dyn.ah62d4rv4gu8zs3pcnzme2641rf4guzdmsv0gn64uqm10c6xenv61a3k),我对那些dyn.(…)UTI持谨慎态度.听起来像不应该被硬编码的东西.

有没有可靠的方法将WebURLsWithTitlesPboardType样式标识符转换为UTI?我不相信实际使用[pboard types]作为映射的方法……

解决方法 我确信NSPasteboard的-types的文档实际上是错误的.正确的文档应该是这样的:

An array of Nsstring objects containing the union of the types of data declared for all the pasteboard items on the receiver,with the addition of old-style,non-UTI type IDentifIErs.

如果您的目标是OS X 10.6,那么您应该能够完全忽略NSPasteboard的-types并仅关注每个NSPasteboardItem的类型,但这需要专门针对UTI.

要将非UTI类型标识符转换为UTI,您需要使用UTTypeCreatePreferredIDentifIErForTag()函数;您还需要知道您已经拥有哪种标识符(kUTTagClassfilenameExtension,kUTTagClassMIMEType,kUTTagClassNSPboardType或kUTTagClassOSType).此类型是函数的第一个参数.第二个是标识符本身(作为CFStringRef).虽然文档表明可以为第三个参数传递NulL,但在生成这些动态UTI时实际传递kUTTypeData似乎很重要.

例如,要获取具有旧样式标识符“WebURLsWithTitlesPboardType”的数据的(动态)UTI:

CFStringRef webURLsWithTitlesUTI = UTTypeCreatePreferredIDentifIErForTag(kUTTagClassNSPboardType,CFSTR("WebURLsWithTitlesPboardType"),kUTTypeData);
总结

以上是内存溢出为你收集整理的objective-c – 为什么NSPasteboard的-types不返回包含的NSPasteboardItem的-types的并集?全部内容,希望文章能够帮你解决objective-c – 为什么NSPasteboard的-types不返回包含的NSPasteboardItem的-types的并集?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1002883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存