I am having some difficulty with saving NSAttributedStrings as RTFD and then recovering them with attachments intact. I generate a string containing an attachment and turn that into RTFD. When I turn that RTFD back into an NSAttributedString, I get the .string back, and I get an attachment, but the attachment's .contents is empty.
This is the smallest example I can come up with: func testSaveAndRestoreAttachment() { // Build up the string "deadbeef<attachment foobar>deadbeef" let originalContent = "foobar".data(using: .utf8) let originalAttachment = NSTextAttachment( data: originalContent, ofType: "public.plain-text") let originalString = NSMutableAttributedString(string: "deadbeef") originalString.append(NSMutableAttributedString(attachment: originalAttachment)) originalString.append(NSMutableAttributedString(string: "deadbeef") // save string as RTFD (note that generated RTFD contains "foobar" inside.) let savedRtfd = originalString.rtfd(from: NSRange(0..<originalString.length))! // Recover string let recoveredString = NSAttributedString(rtfd: savedRtfd, documentAttributes: nil)! // Implementation of attachments() can be found below. let recoveredAttachments = attachments(from: recoveredString) // There *is* an attachment! let recoveredAttachment = recoveredAttachments[0] // Want to get Data("foobar") but actually get nil :( XCTAssertNotNil(recoveredAttachment.contents) } When I print out the RTFD I can see the document includes the attachment "foobar". I'm assuming that I need to pass some additional information when I call NSAttributedString(rtfd:, documentAttributes:) but I'm at a loss here. Am I missing something simple? Perhaps a magical setting to be passed in documentAttributes? -jeff ** This is the attachments() function used above: func attachments(from s: NSAttributedString) -> Array<NSTextAttachment> { var attachments: Array<NSTextAttachment> = [] s.enumerateAttribute(.attachment, in: NSRange(0..<s.length)) { value, range, stop in guard let a = value else { return } attachments.append(a as! NSTextAttachment) } return attachments } _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com