Кажется, что новый интерфейс API для монтажа в 10.6 работает хорошо, как только вы разберетесь с UTI, но я столкнулся с ситуацией, которую я не могу взломать: что, если вы объявляете несколько типов данных вместе с файлом перетащить
Посмотрите, как работает новый монтажный картон, вы положили на него данные, используя setString, setData, setPropertyList или writeObjects. Первые 3 требуют, чтобы вы указали UTI заранее, чтобы получатель мог выбрать желаемое представление.
Для последнего - writeObjects - требуется массив объектов, совместимых с NSPasteboardWriting, таких как вспомогательный класс NSPasteboardItem.
Проблема в том, что Finder интерпретирует любой URL-адрес, добавленный в монтажную панель, как буквальный URL-адрес, поэтому вместо перетаскивания файла он создает URL-адрес в файле.
Нет способа (который я могу найти) создать NSPasteboardItem для URL. Что оставляет это (из шапки):
APPKIT_EXTERN NSString *NSFilenamesPboardType; //Deprecated
// Use -writeObjects: to write file URLs to the pasteboard
Однако, если вы смешаете URL с элементом NSPasteboard, результат не будет работать.
NSPasteboardItem *noteItem = [[[NSPasteboardItem alloc] init] autorelease];
[noteItem setString:theString forType:NSPasteboardTypeString];
//Here is the problem: you can only have one or the other, not both.
[pasteboard writeObjects:[NSArray arrayWithObjects:noteItem, nil]]; //A
[pasteboard writeObjects:[NSArray arrayWithObject:fileURL]]; //B
// A or B will work but not both
[pasteboard writeObjects:[NSArray arrayWithObjects:
fileURL, noteItem, nil]]; //Will not work
Я бы посчитал отличным примером, если бы кто-то мог написать что-то, что могло бы выполнить оба из них вместе.
Вот тест: