我需要将NSMutableAttributedString
保存到文件中。我按照通常的NSString
进行设置,但我发现write
不适用于属性文本。我将文件扩展名更改为.rtf以查看是否可以执行任何操作,但它没有。我也做了一些研究,我发现只有两个问题可能会有所帮助。但是,没有答案的this和this,其中有一个过时的(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 {
}
}
}