我最近收到了错误:
requesting caretRectForPosition: while the NSTextStorage has oustanding changes {x, x}
*"Oustanding"实际上就是它所说的,而不是我的错字.
当我使用方法迭代NSTextStorage
子类并在文本视图中的每次更改后操作文本视图中的s时,都会调用NSTextView
此enumerateAttribute()
方法NSTextAttachment
.
func manipulateText() { let text = customTextView.textStorage text.enumerateAttribute(NSAttachmentAttributeName, inRange: NSMakeRange(0, text.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { // } } extension ThisViewController: UITextViewDelegate { func textViewDidChange(textView: UITextView) { manipulateText() } }
像这样的问题似乎是在线的,但我还没有发现任何这种情况,似乎只与iOS 9相关.
只有在iPad上使用物理键盘时才会发生这种情况.
如果在文本存储编辑时调用caretRectForPosition
(或任何调用它的方法),则会发生这种情况firstRectForRange
.
我能够通过延迟一些东西来阻止这些日志,直到在endEditing
NSTextStorage和dispatch_async
主队列中调用之后才能完成我的工作.由于异步,没有任何可见的UI闪烁或任何内容.
必须有一个更好的方法来解决这个问题,但这是我能想到的.