将属性文本保存到Swift中的文件中

时间:2017-07-09 02:21:04

标签: swift macos swift3 nsattributedstring writetofile

我需要将NSMutableAttributedString保存到文件中。我按照通常的NSString进行设置,但我发现write不适用于属性文本。我将文件扩展名更改为.rtf以查看是否可以执行任何操作,但它没有。我也做了一些研究,我发现只有两个问题可能会有所帮助。但是,没有答案的thisthis,其中有一个过时的(Swift 2)答案,我也没有完全理解。具体来说,this comment给了我一些关于使用什么的想法,但文档对我如何使用它并没有帮助。  此外,似乎有些已经在Swift 3中使用更改的语法重命名,这使得它稍微困难一些。另外,每个的具体用法和目的对我来说有点混乱。 other answer给了我一些帮助,但最终还没有帮助我解决我的问题。答案是使用NSSavePanel来编写它,根据我的收集,它是基于用户输入的。我认为适用于此的是推荐做fileWrapperFromRange(range, documentAttributes: [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType])的部分。但是,我现在感到困惑,因为Swift 3的语法已经改变了,而且此时我不知道我在做什么,而且我是盲目的。我觉得这可能有希望,但我完全不知道如何应用或使用它,所以我把它拿出来。到目前为止,这是我的代码:

func createFile(text:NSMutableAttributedString) {
    let file = "Attributed.rtf"
    if let dir : NSString = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first as! NSString {
        let path = dir.appendingPathComponent(file);
        do {
            try text.write(toFile: path,atomically: false, encoding: String.Encoding.utf8.rawValue)//.write is the issue
        } catch {

        }
    }
}

如何将其转换为包含Swift 3中的属性文本的文档?谢谢。

编辑: 这最终为我工作:

func createFile(attributedText:NSMutableAttributedString) {
    let file = "Attributed.rtf"
    if let dir : NSString = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first as! NSString {
        let path = dir.appendingPathComponent(file);

                        do {
            let stringData = try attributedText.data(from: NSRange(location: 0, length: attributedText.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType])
            let newStringData = String(data: stringData, encoding: .utf8)
            try newStringData?.write(toFile: path, atomically: false, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))

        } catch {
        }
    }
}

0 个答案:

没有答案