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

Posted

技术标签:

【中文标题】如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?【英文标题】:How do I handle multiple file drag/drop from Finder in Mac OS X 10.5? 【发布时间】:2011-01-01 04:10:14 【问题描述】:

我需要从 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];
            

【问题讨论】:

【参考方案1】:

获取多个文件名很容易:(虽然使用 10.5 获取 multiple URLs is not)

    注册您的视图 NSFilenamesPboardTypeperformDragOperation: 中执行以下操作以获取文件路径数组:

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

【讨论】:

返回的 NSArray 不是 NSURL*。它是 NSString*。 感谢您指出这一点。 (我将数组从 'urls' 重命名为 'filenames' 以明确其内容不是 NSURL* 类型)【参考方案2】:

IKImageKit programming topics 概述了这样做的方法(意译):

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

请看这里:Image Kit Programming Guide: Supporting Drag and Drop

【讨论】:

【参考方案3】:

NSURLPboardType 只处理一个 URL。

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

Apple 的 docs on drag and drop 相当不错,即使它是旧的东西。

【讨论】:

【参考方案4】:

如何在 10.5 上处理[粘贴板上的多个项目]?

试试Pasteboard Manager。

棘手的部分是你正在处理一个drop,这意味着你正在接收一个已经为你创建的NSPasteboard,并且没有办法在NSPasteboard对象和PasteboardRefs之间进行转换。您必须向 NSPasteboard 询问其 name,然后将相同的名称传递给 PasteboardCreate,这可能行不通。

【讨论】:

【参考方案5】:

我的 Swift 5.1 两分钱(放入 NSView... 进行自定义)

参见:

Swift: Opening a file by drag-and-drop in window

【讨论】:

以上是关于如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?的主要内容,如果未能解决你的问题,请参考以下文章

Idea for Mac 快捷键(快捷键选择:Mac OS X 10.5+)

如何在 10.6 上为 OS X 10.5 构建 Qt

OS X 10.5 malloc 中的错误?

如何在Mac OS X中显示隐藏的文件

在 Mac OS X 上调试和杀死应用程序?

Java Applet、AWT Refresh、Mac OS X 10.4 上的问题