2010-01-04 75 views
8

我需要从Finder中将所有文件的URL拖放到我的应用程序中。如何在Mac OS X 10.5中从Finder处理多个文件拖放操作?

我有一个在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]; 
    }   

回答

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

9

获得多个文件名很简单:(尽管取得multiple URLs is not 10.5)

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

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

返回的NSArray不是NSURL *。这是NSString *。 – 2012-09-10 15:07:15

+0

感谢您指出这一点。 (我将数组从'urls'重命名为'filenames'以清楚表明内容不是NSURL类型*) – 2012-09-10 15:27:55

0

如何处理[在纸板多个项目]的10.5?

尝试Pasteboard Manager

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

1

的NSURLPboardType只处理一个URL。

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

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