For this week’s “Nerd Snipe”, I spent way too much time at work trying to track down a pesky bug related to our editor. Long story short, we send some custom NSAttributedString.Key
s to signify differences in rich text. For instance, a heading attribute with an integer value may tell a parser to wrap text in an <h2>
when converting the string to HTML.
Oddly, sometimes that special attribute wouldn’t be included when text was autocorrected, so the generated HTML wasn’t always what we expected. After a lot of digging I believe this could be a bug in UITextView (or maybe NSTextStorage).
Inspecting the value of attrString
in the NSTextStorage function func replaceCharacters(in range: NSRange, with attrString: NSAttributedString)
after autocorrecting some text shows that it only seems to include attributes that were defined in Foundation (e.g. NSFont, etc.), but not our custom ones.
Regular typing works fine – you see all the expected attributes set in textView.typingAttributes
.
In scenarios like these I like to make the simplest example to help confirm I understand it, so I’ve made a repo demonstrating the issue in case it’s helpful for anyone.