Objective c 如何检测粘贴板项目类型

Objective c 如何检测粘贴板项目类型,objective-c,nspasteboard,Objective C,Nspasteboard,我试图区分三种类型的对象: 如果它是一个文件的URL 如果它是一个目录的URL 如果它是一个简单的字符串 到目前为止,我只有这个代码,它不工作 NSArray * classes = nil; classes = [[NSArray alloc] initWithObjects:[NSURL class], [NSAttributedString class],[NSString class], nil];

我试图区分三种类型的对象:

  • 如果它是一个文件的URL
  • 如果它是一个目录的URL
  • 如果它是一个简单的字符串
  • 到目前为止,我只有这个代码,它不工作

    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];
    
    现在我尝试获取数组copiedItems的第一个对象,并尝试调用“types”属性,结果崩溃了

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

    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];
    

    types
    NSPasteboard
    上的一种方法,用于告诉您可以从粘贴板获得什么。所以,你不应该在从粘贴板上取回的物品上打电话

    如果要请求多个类类型,请迭代响应并检查每个项的类类型,然后决定如何与之交互


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

    我刚刚检查过。类NSPasteboardItem上有一个可用的方法。。。我要试试你提出的另一个主意!返回的项目符合
    NSPasteboardReading
    协议,但它没有
    类型
    方法。感谢您的回答,但我已经清理了这两个页面好几天了。。。我还没有运气呢!这个列表是从哪里来的?列表来自我答案中的链接(第一行,第二个链接)。我对答案做了一点修改,是否有帮助