2010-01-04 5 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 довольно хороши, даже если это более старые вещи.

 Смежные вопросы

  • Нет связанных вопросов^_^