NSFilenamesPboardType
устарела 10.14, и предлагается использовать NSPasteboardTypeFileURL
. Это дает мне имя файла как
Файл: ///.file/id=6571367.12885025918
и NSWorkspace
не могут вытащить UTI из него.
Как получить ИМП от NSPasteboardTypeFileURL
?
Старый код:
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSDragOperation sourceDragMask = [sender draggingSourceOperationMask];
NSDragOperation resultingDragMask = NSDragOperationNone;
NSPasteboard *pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
NSArray <NSString *>*list = [pboard propertyListForType:NSFilenamesPboardType];
NSString *firstItem = [list objectAtIndexedSubscript:0];
NSError *error;
NSString *UTI = [[NSWorkspace sharedWorkspace] typeOfFile:firstItem error:&error];
if (!error) {
if ([[NSImage imageTypes] containsObject:UTI]) {
resultingDragMask = NSDragOperationCopy;
}
}
} else if ([[pboard types] containsObject:NSPasteboardTypeTIFF]) {
resultingDragMask = NSDragOperationCopy;
}
if (sourceDragMask & NSDragOperationCopy && resultingDragMask & NSDragOperationCopy) {
return NSDragOperationCopy;
}
return NSDragOperationNone;
}
При NSPasteboardTypeFileURL
я получаю ошибку, которая утверждает, что файл не существует. Притащили из картона:
Распечатка описания ошибки:
Ошибка домена = NSCocoaErrorDomain Code = 260 "Файл" id = 6571367.12885025918 "не может быть открыт, потому что нет такого
file. "UserInfo = {NSURL = file: /. file / id = 6571367.12885025918 -
файл: ///Users/xxx/Library/Containers/com.xxx.imageviewfix/Data/,
NSFilePath = / Users / ххх / Library / Контейнеры / com.xxx.imageviewfix / Data / Файл:. / Файл / ID = 6571367,12885025918,
NSUnderlyingError = 0x600000c70d80 {Ошибка домена = NSPOSIXErrorDomain
Code = 2 "Нет такого файла или каталога"}}