Я пытаюсь преобразовать приложение Windows в OSX, теперь все работает, кроме этой небольшой функции, перетащить капюшон файлов из моего приложения в любое другое окно, которое поддерживает капли. Получение капель легко, проблема заключается в том, что источник данных перетаскивается.Перетаскивание файлов в другие приложения в cocoa OSX
Мое приложение имеет только 1 окно с 1 видом, я рисую каждый элемент управления сам там. Поэтому я просто расширил свое представление следующим образом: @interface NativeView : NSView <NSDraggingSource, NSPasteboardItemDataProvider>
.
Теперь ресто кода я до сих пор должны работать по-моему, но опять же я не знаю, что много о какао и OSX:
NSArray *fileList = [NSArray arrayWithObjects:&pathList[0] count:pathList.size()];
NSPasteboard *pboard = [NSPasteboard pasteboardWithName: NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:nil];
[pboard setPropertyList:fileList forType:NSFilenamesPboardType];
NSPasteboardItem *pbItem = [NSPasteboardItem new];
[pbItem setDataProvider:view forTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
[pbItem pasteboard:pboard provideDataForType:NSFilenamesPboardType];
NSDraggingItem *dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem];
[dragItem setDraggingFrame:NSMakeRect(0, 0, 10, 10)];
[view beginDraggingSessionWithItems:[NSArray arrayWithObjects:dragItem, nil] event:mouseEvent source:view];
список файлов массив NSString*
. И где вы видите view
, это означает интерфейс NativeView
, он реализован таким образом, потому что он закодирован в C++;
В настоящее время код блокируется, когда я пытаюсь установить pasteboard
в pbItem
. Я имею в виду, что за этой линией ничего не выполняется. Я также пытался избавиться от NSPasteboard
и использовать только NSPasteboardItem
, но я получаю EXC_BAD_ACCESS, работающий с последней строкой: beginDraggingSessionWithItems
.
Я не нашел примеров онлайн о перетаскивании файлов, все, что есть, NSImage
, и я не могу использовать этот тип перетаскивания.
Любая помощь будет рада, спасибо.