如何在Mac OS X 10.5中处理从Finder拖放的多个文件?

9

我需要获取从Finder拖放到我的应用程序中的所有文件的URL。

我有一个在10.6上运行的Cocoa应用程序,通过使用新的10.6 NSPasteboard API来处理剪贴板上的多个项目来实现此目的。我正在尝试将此应用程序回退到10.5。如何在10.5上处理它?

如果我像下面这样做,我只能获得第一个URL:

    NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil];
    NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
    if (bestType != nil) {
        NSURL *url = [NSURL URLFromPasteboard:pboard];
    }        
5个回答

10

获取多个文件名很容易:(而在10.5中无法获取多个URL

  1. NSFilenamesPboardType注册您的视图
  2. performDragOperation:中执行以下操作以获取文件路径数组:

NSPasteboard* pboard = [sender draggingPasteboard];
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];

1
返回的NSArray不是NSURL,而是NSString - simon.d
感谢指出。我将数组从“urls”重命名为“filenames”,以明确其内容不是NSURL*类型。 - Thomas Zoechling

6

IKImageKit编程主题概述了一种通过以下方式实现的方法(改写):

   NSData *data = [pasteboard dataForType:NSFilenamesPboardType];
   NSArray *filenames = [NSPropertyListSerialization
        propertyListFromData:data
            mutabilityOption:kCFPropertyListImmutable
                      format:nil
            errorDescription:&errorDescription];

看这里:图像套件编程指南:支持拖放

1

NSURLPboardType 只处理一个 URL。

要获取文件列表,您需要从 NSFilenamesPboardType 创建一个 NSArray。

苹果公司关于拖放的 文档 相当不错,即使是旧版本的内容也很有用。


0
我该如何在10.5上处理[黏贴板上的多个项目]?
尝试使用黏贴板管理器
麻烦的部分是您正在处理拖放操作,这意味着您已经接收到了一个为您创建的NSPasteboard,并且没有办法在NSPasteboard对象和PasteboardRef之间进行转换。您将不得不询问NSPasteboard其名称,然后将相同的名称传递给PasteboardCreate,这可能不起作用。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接