将NSAttributedString转换为数据进行存储

我有一个UITextView属性文本和allowsEditingTextAttributes设置为true

我试图将属性的string转换成一个数据对象,使用下面的代码:

 let text = self.textView.attributedText let data = try text.data(from: NSMakeRange(0, text.length), documentAttributes: [:]) 

但是,这是抛出以下错误:

 Error Domain=NSCocoaErrorDomain Code=66062 "(null)" 

任何想法这个错误意味着什么或可能导致这种情况? 我在最新的Xcode和iOS上。 谢谢。

您需要指定要将您的属性string转换为什么样的文档数据:


 NSPlainTextDocumentType // Plain text document. .txt document NSHTMLTextDocumentType // Hypertext Markup Language .html document. NSRTFTextDocumentType // Rich text format document. .rtf document. NSRTFDTextDocumentType // Rich text format document with attachment. (.rtfd) document. 

Xcode 8.3.2•Swift 3.1

 let textView = UITextView() textView.attributedText = NSAttributedString(string: "abc", attributes: [NSFontAttributeName: UIFont(name: "Helvetica", size: 16)]) if let attributedText = textView.attributedText { do { let htmlData = try attributedText.data(from: NSRange(location: 0, length: attributedText.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]) let htmlString = String(data: htmlData, encoding: .utf8) ?? "" } catch { print(error) } } 

更新Xcode 9.0.1•Swift 4

 let textView = UITextView() let attributes: [NSAttributedStringKey: Any] = [.font: UIFont(name: "Helvetica", size: 16)!] textView.attributedText = NSAttributedString(string: "abc", attributes: attributes) if let attributedText = textView.attributedText { let documentAttributes: [NSAttributedString.DocumentAttributeKey: Any] = [.documentType: NSAttributedString.DocumentType.html] do { let htmlData = try attributedText.data(from: NSRange(location: 0, length: attributedText.length), documentAttributes: documentAttributes) let htmlString = String(data: htmlData, encoding: .utf8) ?? "" print(htmlString) } catch { print(error) } } 

这将打印

 /* <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title></title> <meta name="Generator" content="Cocoa HTML Writer"> <style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica} span.s1 {font-family: 'Helvetica'; font-weight: normal; font-style: normal; font-size: 16.00pt} </style> </head> <body> <p class="p1"><span class="s1">abc</span></p> </body> </html> */