NSPasteboard未返回正确的数据类型

时间:2012-03-01 11:32:44

标签: objective-c cocoa nspasteboard

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

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

2 个答案:

答案 0 :(得分:0)

如果您只是尝试从粘贴板中读取数据类型,则可能需要使用-canReadItemWithDataConformingToTypes:-canReadObjectForClasses:options:来测试这些是否可用。

如果您想要自己阅读对象,那么您正在进行正确的调用,尽管您使用它们的方式可能会在有多个项目的情况下检索粘贴板上同一项目的多个表示形式带有文本和图像表示的粘贴板。

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

答案 1 :(得分:0)

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

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

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

然而,我使用的Xcode版本声明其中一些可能会在将来的版本中删除(使用xcode 3),所以如果有人使用这些,请小心..

感谢您的帮助!