将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> */