【问题标题】:NSPasteboard not returning the correct data typeNSPasteboard 没有返回正确的数据类型
【发布时间】:2012-03-01 11:32:43
【问题描述】:

我正在尝试读取在粘贴板中找到的数据类型。但是,程序返回我有一张图片(可能是因为这是 if 语句中的第一个条件)。我究竟做错了什么?这是我所指的代码的一部分。谢谢。

NSArray * imgType = [NSArray arrayWithObject:[NSImage class]];
NSArray * strType = [NSArray arrayWithObject:[NSString class]];

NSArray * pboardImg = [pboard readObjectsForClasses:imgType
                                         options:nil];
NSArray * pboardStr = [pboard readObjectsForClasses:strType
                                         options:nil];

if( pboardImg ){
// Got an image!
}

if( pboardStr ){
   // Got a string!
}

【问题讨论】:

  • 数组中有多少条目?
  • 这不是因为 pboardImg 不是 nil

标签: objective-c cocoa nspasteboard


【解决方案1】:

如果您只是想从粘贴板上读取数据的类型,您可能希望使用-canReadItemWithDataConformingToTypes:-canReadObjectForClasses:options: 来测试它们是否可用。

如果您想读取对象本身,那么您所做的调用是正确的,尽管您使用它们的方式可能会在粘贴板上有多个项目的情况下检索多个相同项目的表示形式具有文本和图像表示的粘贴板。

您可能还想检查[pboardImg count] > 0。尽管文档明确指出如果无法创建该类型的任何对象,将返回 nil,但无论如何您都不太可能对长度为零的数组执行任何操作,并且 Objective-C 调度程序将使调用短路到 nil 返回 0 这也将导致测试失败(如您所愿)。

【讨论】:

  • 我找到了解决方案,正如 gaige 所说,返回的数据不仅包含用户可以看到的内容,还包含许多其他类型的信息。
【解决方案2】:

我找到了解决方案,正如 gaige 所说,返回的数据不仅包含用户可以看到的内容,还包含许多其他类型的信息。

我还发现并尝试使用其他类型的可用信息,其中一些信息如下:

*NSStringPboardType;        
*NSFilenamesPboardType;  
*NSTIFFPboardType;      
*NSRTFPboardType;      
...

但是我使用的 Xcode 版本指出,其中一些可能会在未来的版本中被删除(我使用的是 xcode 3)所以如果有人使用这些要小心..

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多