Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 使用Swift将邮件拖到Dock上_Macos_Swift_Drag And Drop_Dock - Fatal编程技术网

Macos 使用Swift将邮件拖到Dock上

Macos 使用Swift将邮件拖到Dock上,macos,swift,drag-and-drop,dock,Macos,Swift,Drag And Drop,Dock,我正试图让我的应用程序接受一封邮件,该邮件是直接从mail发送到我的应用程序的dock图标上的 我一直在关注这个链接,并试图将其转换为Swift和最新版本的Xcode,但毫无乐趣 这是我的AppDelegate.Swift文件: import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { func application(sender: NSApplication, openF

我正试图让我的应用程序接受一封邮件,该邮件是直接从mail发送到我的应用程序的dock图标上的

我一直在关注这个链接,并试图将其转换为Swift和最新版本的Xcode,但毫无乐趣

这是我的AppDelegate.Swift文件:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate
{
    func application(sender: NSApplication, openFile filename: String) -> Bool
    {
        println(filename)
        return true
    }

    func application(sender: NSApplication, openFiles filenames: [String])
    {
        println(filenames)
    }
}
我已为我的项目设置了文档类型:

当我将邮件文档从mail拖到dock中时,dock会高亮显示,好像它想要接受它,但没有任何东西触发openFiles方法

顺便说一句,如果我将邮件文件从mail拖到Finder中,然后将其拖到dock图标上,它就可以正常工作

邮件投递似乎只在El Capitan起作用。我可以看到邮件现在可以放入TextWrangler;这在约塞米蒂政府下是行不通的


作为奖励,我将向任何能帮我解决这一问题的人额外提供50份奖金。

您可以通过将以下内容添加到应用程序的信息列表中,将应用程序注册为服务来提取邮件项目的URL:

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

关于如何获得承诺的文件。

可能重复的问题我已经按照这个问题做了尽可能多的工作,并将其提炼成Swift,但仍然无法使其工作。我认为,由于您要从一个应用程序拖动到另一个应用程序,您需要使用拖放(请参见此处:--它是Cocoa格式的,但无论如何都要浏览)。我并不是百分之百的认同这一点,我已经做了0次测试,因此是一个评论而不是一个答案,但可能值得一看。谢谢你的帮助。我现在可以将我的消息放到dock中,但就像您一样,我只知道message:URL,而看不到如何获取消息体。再往前一点,但暂时还没有解决。请参阅。我已经尝试用NSSendTypes的NSSendTypes实现这个答案(在ObjC中),不幸的是,我的粘贴板只有两种类型:public.url-name和coreposteboardFlavortType 0x75726C6E。也许是El Capitan的新行为?我很高兴看到这样的信息:…URL,但即使这样也没有运气。
import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        NSApp.servicesProvider = self
    }

    @objc func itemsDroppedOnDock(pboard: NSPasteboard, userData: NSString, error: UnsafeMutablePointer<NSString>) {
        // help from https://stackoverflow.com/questions/14765063/get-dropped-mail-message-from-apple-mail-in-cocoa
        print("dropped types: \(pboard.types)")
        if let types = pboard.types {
            for type in types {
                print(" - type: \(type) string: \(pboard.stringForType(type))")
            }
        }

    }
}
dropped types: Optional(["public.url", "CorePasteboardFlavorType 0x75726C20", "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu", "Apple URL pasteboard type"])
 - type: public.url string: Optional("message:%3C2004768713.4671@tracking.epriority.com%3E")
 - type: CorePasteboardFlavorType 0x75726C20 string: Optional("message:%3C2004768713.4671@tracking.epriority.com%3E")
 - type: dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu string: Optional("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<array>\n\t<string>message:%3C2004768713.4671@tracking.epriority.com%3E</string>\n\t<string></string>\n</array>\n</plist>\n")
 - type: Apple URL pasteboard type string: Optional("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<array>\n\t<string>message:%3C2004768713.4671@tracking.epriority.com%3E</string>\n\t<string></string>\n</array>\n</plist>\n")