Convert NSAttributedString into Data for storage

I have a UITextView with attributed text and allowsEditingTextAttributes set to true.

I’m trying to convert the attributed string into a Data object, using the following code:

  • Draw glow around inside edge of multiple CGPaths
  • Set tab bar item selected image in xcode 6
  • Making two UIScrollViews follow each others scrolling
  • Apple Mach - O Linker Error.No such file or directory Swifty Json
  • Method for downloading iCloud files? Very confusing?
  • How do I download a file from S3 to an iPhone application?
  • let text = self.textView.attributedText
    let data = try text.data(from: NSMakeRange(0, text.length), documentAttributes: [:])
    

    However, this is throwing the following error:

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

    Any ideas what this error means or what could cause this? I’m on the latest Xcode and iOS. Thanks.

    Solutions Collect From Internet About “Convert NSAttributedString into Data for storage”

    You need to specify what kind of document data you would like to convert your attributed string to:


    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)
        }
    }
    

    update 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)
        }
    }
    

    This will print

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