0

我正在尝试读取在粘贴板中找到的数据类型。但是,程序返回我有一个图像(可能是因为这是 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!
}
4

2 回答 2

0

如果您只是想从粘贴板上读取数据的类型,您可能想要使用其中一个,-canReadItemWithDataConformingToTypes:或者-canReadObjectForClasses:options:只是为了测试这些是否可用。

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

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

于 2012-03-03T21:57:09.253 回答
0

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

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

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

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

谢谢您的帮助!

于 2012-03-07T09:34:14.813 回答