2010-01-04 3 views
8

Мне нужно получить URL-адреса всех файлов, перетаскиваемых/удаленных в мое приложение из Finder.Как обрабатывать несколько перетаскиваний файлов из Finder в Mac OS X 10.5?

У меня есть приложение Cocoa, работающее на 10.6, которое делает это, используя новые 10.6 API-интерфейсы NSPasteboard, которые обрабатывают несколько элементов на картоне. Я пытаюсь выполнить резервное копирование этого приложения до 10.5. Как мне обрабатывать это на 10,5?

Если я что-то сделать, как показано ниже, я получаю только первый URL:

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 *. –

+0

Спасибо, что указали это. (Я переименовал массив из «urls» в «filenames», чтобы было ясно, что содержимое не относится к типу NSURL *) –

0

Как работать [несколько элементов на монтажном столе] на 10,5?

Попробуйте Pasteboard Manager.

Сложная часть заключается в том, что вы обрабатываете капли, что означает, что вы получаете уже созданную для вас NSPasteboard, и нет способа конвертировать между объектами NSPasteboard и PasteboardRef s. Вам нужно будет спросить NSPasteboard для своего name, затем передать одно и то же имя в PasteboardCreate, и это может не сработать.

1

NSURLPboardType просто обрабатывает один URL.

Чтобы получить список файлов, вам необходимо создать NSArray из NSFilenamesPboardType.

Apple docs on drag and drop довольно хороши, даже если это более старые вещи.