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

时间:2010-01-04 08:14:47

标签: cocoa macos drag-and-drop finder nspasteboard

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

我有一个运行在10.6上的Cocoa应用程序通过使用新的10.6 NSPasteboard API来处理粘贴板上的多个项目。我正在尝试将此应用程序向后移植到10.5。我如何处理10.5?

如果我执行下面的操作,我只会获得第一个网址:

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

5 个答案:

答案 0 :(得分:10)

获取多个文件名很简单:(在获取multiple URLs is not时使用10.5)

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:1)

NSURLPboardType只处理一个URL。

获取从NSFilenamesPboardType创建NSArray所需的文件列表。

Apple的docs on drag and drop非常好,即使它是旧的东西。

答案 3 :(得分:0)

  

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

尝试Pasteboard Manager

棘手的部分是您正在处理丢弃,这意味着您正在接收已经为您创建的NSPasteboard,并且无法在NSPasteboard对象和PasteboardRef之间进行转换。您必须向NSPasteboard询问其name,然后将相同的名称传递给PasteboardCreate,这可能无效。

答案 4 :(得分:0)

我的两分钱是迅捷的5.1(在NSView中下降...需要自定义)

参见:

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