objective c - फ़ाइलों को कोको ओएसएक्स में अन्य एप्लिकेशन में खींचें



objective-c macos (1)

मैं एक विंडोज़ अनुप्रयोग को ओएसएक्स में बदलने की कोशिश कर रहा हूं, सब कुछ अब भी काम कर रहा है, इस छोटी सी सुविधा को छोड़कर, मेरे एप से ड्रैग एंड ड्रॉप फाइलों को छोड़कर किसी भी अन्य विंडो में जो बूंदों का समर्थन करता है प्राप्त करना यह आसान है, यह समस्या खींचने के लिए डेटा का स्रोत है।

मेरे आवेदन में 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 , इसे इस तरीके से लागू किया गया है क्योंकि यह सी ++ के अंदर कोडित है;

वर्तमान में, जब मैं pbItem में pasteboard सेट करने का प्रयास करता हूं तो कोड ब्लॉक होता है I मेरा मतलब है कि कुछ भी नहीं है कि उस रेखा से अतीत को निष्पादित किया जाता है मैंने यह भी 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]




nspasteboard