2010-01-04 57 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是相當不錯的,即使它是舊的東西。

相關問題