我最近遇到了错误:
requesting caretRectForPosition: while the NSTextStorage has oustanding changes {x, x}
*“Oustanding”是字面上的意思,不是我的错字。
当我使用
NSTextStorage
方法遍历NSTextView
子类的enumerateAttribute()
并在文本 View 中进行每次更改后在文本 View 中操纵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()
}
}
诸如this之类的问题似乎在线上,但是我还没有发现任何类似的问题,并且似乎仅与iOS 9相关。
仅在iPad上使用物理键盘时才会发生这种情况。
最佳答案
如果在文本存储进行编辑时调用caretRectForPosition
(或任何调用类似firstRectForRange
的方法),则会发生这种情况。
我能够通过推迟一些工作直到在NSTextStorage中调用endEditing
和dispatch_async
到主队列来完成我的工作来防止这些日志。没有任何可见的UI闪烁或异步产生的任何结果。
必须有一种更好的方法来解决此问题,但这就是我所能找到的全部。
关于ios - 请求caretRectForPosition : while the NSTextStorage has outstanding changes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34037169/