使用自定义UTI使用SavePanel保存文件

时间:2017-06-18 08:27:59

标签: swift cocoa swift3 nssavepanel

我经常为桌面应用程序创建自己的文档类型。但我从未注册过自己的自定义UTI。无论如何,我想将一个简单的Dictionary数据保存为数据(NSData)文件,如下所示。

@IBAction func testClicked(_ sender: NSButton) {
    let savePath = self.documentPath() // setting a default path
    let savePanel = NSSavePanel()
    savePanel.directoryURL = NSURL.fileURL(withPath: savePath)
    savePanel.title = ""
    savePanel.message = ""
    savePanel.nameFieldStringValue = "File"
    savePanel.showsHiddenFiles = false
    savePanel.showsTagField = false
    savePanel.canCreateDirectories = true
    savePanel.allowsOtherFileTypes = false
    savePanel.allowedFileTypes = ["customtype"]
    savePanel.isExtensionHidden = false
    if savePanel.runModal() == NSFileHandlingPanelOKButton {
        let dict = ["title": "New York Nightly News", "url": "http://www.newyorknightlynews.net/cmlink/TopNews.rss"] as Dictionary<String, String>
        let data = NSKeyedArchiver.archivedData(withRootObject: dict)
        do {
            try data.write(to: savePanel.url!, options: .atomic)
        }
        catch {

        }
    } else {
        print("canceled")
    }
}

enter image description here

我已经设置了文档类型和导出的UTI,如上所示。

最初,我将UTTypeConformsTo类型设置为public.data。但我已将其更改为public.xmlpublic.text。但是,导出的文件没有文件图标。我的自定义UTI似乎没有被正确识别。我的目标是让这个桌面应用程序生成一个文件,以便用户可以通过AirDrop将其发送到iOS等效文件。我究竟做错了什么?感谢。

0 个答案:

没有答案