我最近遇到了错误:

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中调用endEditingdispatch_async到主队列来完成我的工作来防止这些日志。没有任何可见的UI闪烁或异步产生的任何结果。

必须有一种更好的方法来解决此问题,但这就是我所能找到的全部。

关于ios - 请求caretRectForPosition : while the NSTextStorage has outstanding changes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34037169/

10-08 23:37