macos – 将承诺的文件放到Dock中的应用程序图标上

macos – 将承诺的文件放到Dock中的应用程序图标上,第1张

概述是否可以在Dock中的应用程序图标上打开沙箱应用程序中的承诺文件NSFilesPromisePboardType? Dock图标正在接受drop,但是-application:openFile:永远不会被调用. 我找到的唯一参考是预沙箱: Accepting iCal events dropped on my application’s icon 让我们分解一下:基于NSDocument的应用程序 是否可以在Dock中的应用程序图标上打开沙箱应用程序中的承诺文件NSfilesPromisePboardType? Dock图标正在接受drop,但是-application:openfile:永远不会被调用.

我找到的唯一参考是预沙箱:
Accepting iCal events dropped on my application’s icon

解决方法 让我们分解一下:基于NSdocument的应用程序中的NSApplication和NSdocumentController为您提供了-application:openfile:或-opendocumentWithContentsOfURL:display:completionHandler:在NSfilenamesPboardType和NSURLPboardType丢弃的情况下免费提供.

注意:我认为这是使用kCoreEventClass / kAEopendocuments和kInternetEventClass / kAEGetURL的NSAppleEventManager事件处理程序实现的.

不幸的是,他们没有处理NSfilesPromisePboardType.

让我们刷新我们的粘贴板知识:粘贴板在所有应用程序之间共享.有复制,查找和拖动等任务的默认粘贴板.

当拖动开始时,应用程序将写入共享拖动粘贴板.所以我们现在需要的是关于Drop to Dock图标的通知.

这是NSService发挥作用的地方:

<key>NSServices</key><array>    <dict>        <key>NSMessage</key>        <string>openService</string>        <key>NSSendTypes</key>        <array>            <string>public.data</string>        </array>        <key>NSMenuItem</key>        <dict>            <key>default</key>            <string>Open</string>        </dict>    </dict></array>

并在代码中设置它:

- (voID)applicationWillFinishLaunching:(NSNotification *)notification{    [NSApp setServicesProvIDer:self];}- (voID)openService:(NSPasteboard *)serviceBoard           userData:(Nsstring *)userData              error:(Nsstring **)error{}

需要注意的是,NSService粘贴板不是NSDragPboard粘贴板.

但它们都是共享的,所以我们可以访问我们想要的那个:

NSPasteboard *dragPboard = [NSPasteboard pasteboarDWithname:NSDragPboard];if ([[dragPboard types] containsObject:NSfilesPromisePboardType]){}

下一个问题是我们没有 – [NSDraggingInfo namesOfPromisedfilesDroppedAtDestination:].

#import <applicationservices/applicationservices.h>

好老碳让我们得到了保障.

PasteboardRef pboardRef = NulL;    PasteboardCreate((__brIDge CFStringRef)NSDragPboard,&pboardRef);    PasteboardSetPasteLocation(pboardRef,(__brIDge CFURLRef)temporaryDirectory);    Nsstring *urlString = [dragPboard stringForType:(Nsstring *)kPasteboardTypefileURLPromise];    CFRelease(pboardRef);

像这里的任何其他承诺文件一样处理.

总结

以上是内存溢出为你收集整理的macos – 将承诺的文件放到Dock中的应用程序图标上全部内容,希望文章能够帮你解决macos – 将承诺的文件放到Dock中的应用程序图标上所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1032814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存