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

5 回答 5

10

获取多个文件名很容易:(虽然获取多个 URL 不是10.5)

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

NSPasteboard* pboard = [sender draggingPasteboard];
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];
于 2010-01-04T09:03:45.453 回答
6

概述IKImageKit programming topics这样做的方法(释义):

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

请参阅此处:Image Kit 编程指南:支持拖放

于 2010-01-04T14:00:10.640 回答
1

NSURLPboardType 只处理一个 URL。

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

Apple的拖放文档非常好,即使它是较旧的东西。

于 2011-03-16T22:26:53.477 回答
0

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

试试粘贴板管理器

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

于 2010-01-04T11:30:50.090 回答
0

swift 5.1 我的两分钱(放入 NSView ......要定制)

见:

Swift:通过在窗口中拖放来打开文件

于 2020-01-31T08:09:48.103 回答