我希望能够接受来自文件,网址和文本的应用程序停靠栏图标上的拖放。由于文件(public.file-URL)的URL(public.url)的一个亚型,我添加了只有两个服务项目,以我的Info.plist:将文件拖放到应用程序的停靠栏图标上除了代理图标外
Services
Item 0 (processURL)
Instance method Name = processURL
Send Types
Item 0 = public.url
Menu
Menu item title = Process URL
Item 1 (processString)
Instance method Name = processString
Send Types
Item 0 = public.plain-text
Menu
Menu item title = Process Text
然后我做了我-applicationDidFinishLaunching
电话[NSApp setServicesProvider: self]
,并写了几个方法(-processString:userData:error
和-processURL:userData:error
)在我的应用程序委托。应用程序图标现在接受所有三种类型的滴。在-processURL:...
方法中,很容易检查它是否是本地文件,以便处理这两种情况。尽管如此,还是有一例我不能回避。当我尝试将窗口的代理图标拖动到应用程序时,它会突出显示图标,就好像它可以接受放置一样,但是我的方法未被调用。
我试着从Xcode,Terminal,Preview和一些第三方应用中删除代理图标:没有人会调用我的服务方法。但奇怪的是,从Finder中删除的代理图标运行良好。
我试着将public.url
更改为public.item
(物理层次结构的基本类型),但我的方法仍然没有为非Finder代理图标调用。
当搜索成功地滴在我的应用程序的代理图标时,pboard -types
它提供有:
- “public.file-URL”,
- “CorePasteboardFlavorType 0x6675726C”
- “DYN .ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn”
- NSFilenamesPboardType,
- “dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu”
- “Apple URL粘贴板类型”
我试过直接将它们当作“发送类型”使用。 “public.file-url”和“NSFilenamesPboardType”突出显示图标,就好像它会接受放置,但不放。不出所料,其他人甚至不会强调码头图标。
我找不到与具有与正常文件不同的UTI的代理图标的任何引用。他们呢?那会很奇怪。
我知道这一定是可能的,因为我可以从任何窗口拖动代理图标到终端窗口。我错过了什么?
最新消息:来自一个的NSView,如果我-registerForDraggedTypes
包括“public.url”,我做的所有的应用程序获得的代理图标滴,用完全相同的-types
列表,从Finder,上面列出。所以这显然是通过码头图标接收液滴的特别之处。这应该仍然是可能的:您可以将代理图标从(非Finder)窗口(例如,Xcode中的.xcworkspace)拖到终端停靠窗口上,并且它可以捕捉到这一点。
什么是代理图标? –
El Tomato:https://developer.apple.com/library/mac/documentation/userexperience/conceptual/applehiguidelines/art/wn_standardwindowparts_2x.png – user3277676
您是否设法找到针对此问题的解决方案? – iphaaw