2

我试图识别三种类型的对象:

  1. 如果是文件的 URL
  2. 如果是目录的 URL
  3. 如果它是一个简单的字符串

到目前为止,我只有这个代码,它不起作用!

NSArray * classes = nil;
            classes = [[NSArray alloc] initWithObjects:[NSURL class],
                       [NSAttributedString class],[NSString class], nil];

            NSDictionary *options = [NSDictionary dictionary];
            NSArray * copiedItems = nil;
            copiedItems = [pb readObjectsForClasses:classes options:options];

现在我尝试获取数组copyedItems 的第一个对象并尝试调用“types”属性,但我遇到了崩溃!

4

2 回答 2

3

检查herehere
您需要使用这些粘贴板类型,而不是您正在使用的那些。

NSString *NSStringPboardType;
NSString *NSFilenamesPboardType;
NSString *NSPostScriptPboardType;
NSString *NSTIFFPboardType;
NSString *NSRTFPboardType;
NSString *NSTabularTextPboardType;
NSString *NSFontPboardType;
NSString *NSRulerPboardType;
NSString *NSFileContentsPboardType;
NSString *NSColorPboardType;
NSString *NSRTFDPboardType;
NSString *NSHTMLPboardType;
NSString *NSPICTPboardType;
NSString *NSURLPboardType;
NSString *NSPDFPboardType;
NSString *NSVCardPboardType;
NSString *NSFilesPromisePboardType;
NSString *NSMultipleTextSelectionPboardType;

URL 有一种粘贴板类型。为了区分文件和文件夹,您需要使用粘贴板数据实例化一个 NSURL 对象,并通过查询其属性来确定它是否是一个目录。

编辑:您还需要考虑粘贴板数据是否由您自己的应用程序或其他应用程序放置在那里。如果它是由其他应用程序放置的,我不确定带有类的粘贴板类型是否有效。

我在我的一个项目中使用了这样的东西:

supportedTypes = // array with supported types, maybe from the list
NSString *type = [pasteboard availableTypeFromArray:supportedTypes];
NSData *data = [pasteboard dataForType:type];
于 2014-02-23T20:16:57.973 回答
0

types是一种NSPasteboard用于告诉您可以从粘贴板上获得什么的方法。因此,您不应该在从粘贴板返回的项目上调用它。

如果您要请求多个类类型,请遍历响应并检查每个项目的类类型,然后决定如何与之交互。

或者,决定哪种类类型的数据最有用,并向粘贴板发出单独的类类型请求。如果你得到一个结果,使用它并继续,如果没有,尝试下一个最有用的类类型。看看使用canReadObjectForClasses:options:来使这更容易。

于 2014-02-23T20:21:03.007 回答