NSPasteboard未返回正确的数据类型

问题描述:

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

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! 
} 
+0

数组中有多少个条目? – 2012-03-01 11:41:13

+0

是不是因为pboardImg不为零 – 2012-03-01 12:24:47

如果你只是想读从剪贴板中的数据的类型,你可能要为使用-canReadItemWithDataConformingToTypes:-canReadObjectForClasses:options:为了只是测试,如果这些都可用。

如果您想自己读取对象,则可以进行正确的调用,但是如果有多个项目,则使用它们的方式可能会在粘贴板上检索同一项目的多个表示在文本和图像表示的粘贴板上。您可能也想检查[pboardImg count] > 0。尽管文档中明确指出,如果无法创建任何类型的对象,将返回nil,但无论如何您都不可能对零长度数组做任何事情,Objective-C调度程序将会使呼叫短路到nil返回0,这也将失败测试(如你所愿)。

+0

我已经找到了解决方案,正如gaige所说,返回的数据不仅包含用户可以看到的内容,还包含许多其他类型的信息。 – Kevin 2012-03-07 09:31:07

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

我还发现并利用可用的其他类型的信息,其中一些如下实验:

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

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

感谢您的帮助!