将文件拖入可可OSX中的其他应用程序

将文件拖入可可OSX中的其他应用程序

问题描述:

我试图将Windows应用程序转换为OSX,现在一切正常,除了这个小功能,从我的应用程序拖放文件到任何其他支持drop的窗口。接收下降很容易,问题是拖动数据的来源。将文件拖入可可OSX中的其他应用程序

我的应用程序只有1个窗口和1个视图,我在那里绘制每个控件。所以我简单地扩展了我的观点,如@interface NativeView : NSView <NSDraggingSource, NSPasteboardItemDataProvider>

现在代码的Resto餐厅我到目前为止应该在我看来工作,但话又说回来,我不知道很多关于可可和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++编码;

当前,当我尝试在pbItem中设置pasteboard时,代码块会被阻止。我的意思是没有别的东西会被执行过去。我也试图摆脱NSPasteboard,并只使用NSPasteboardItem,但我得到一个EXC_BAD_ACCESS运行最后一行:beginDraggingSessionWithItems

我没有在网上找到任何有关拖动文件的例子,所有这些都是NSImage,我对这种类型的拖动没有用处。

任何帮助将受到欢迎,谢谢。

是的,在线文档相当缺乏。

尝试使用以下方法:

auto* dragItems = [[NSMutableArray alloc] init]; 
for (auto& path : pathList) 
{ 
    auto* fileURL = [NSURL fileURLWithPath: path]; 
    auto* dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter: fileURL]; 
    [dragItem setDraggingFrame: NSMakeRect(0, 0, 10, 10)]; 
    [dragItems addObject: dragItem]; 
} 

[view beginDraggingSessionWithItems: dragItems 
           event: mouseEvent 
          source: view]