Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正在请求caretRectForPosition:而NSTextStorage有未完成的更改_Ios_Swift_Ipad_Uitextview - Fatal编程技术网

Ios 正在请求caretRectForPosition:而NSTextStorage有未完成的更改

Ios 正在请求caretRectForPosition:而NSTextStorage有未完成的更改,ios,swift,ipad,uitextview,Ios,Swift,Ipad,Uitextview,我最近遇到了一个错误: requesting caretRectForPosition: while the NSTextStorage has oustanding changes {x, x} *“驱逐”是字面意思,不是我的打字错误 当我使用enumerateAttribute()方法遍历NSTextView子类的NSTextStorage并在文本视图中每次更改后操作文本视图中的NSTextAttachment时,会调用此函数 func manipulateText() { let

我最近遇到了一个错误:

requesting caretRectForPosition: while the NSTextStorage has oustanding changes {x, x}
*“驱逐”是字面意思,不是我的打字错误

当我使用
enumerateAttribute()
方法遍历
NSTextView
子类的
NSTextStorage
并在文本视图中每次更改后操作文本视图中的
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
的任何方法),则会发生这种情况

我可以通过将某些内容推迟到在NSTextStorage中调用
endEditing
dispatch_async
到主队列执行我的工作之后,来阻止这些日志。由于异步,没有任何可见的UI闪烁或任何东西


必须有更好的方法来解决这个问题,但这是我所能想到的。

在9.2中,无论是否使用物理键盘,我都会遇到这种情况。@SamSoffes您是否覆盖了任何与插入符号相关的方法?没有。不过我正在做一些复杂的事情。还没有花时间尝试简化来解决这个问题。最近有关于这个问题的更新吗?我收到了同样的明显错误消息,我有一个自定义的NSTextStorage,它可以与标准UITextView配合使用,但是当我将它与自定义UITextView子类一起使用时,它演示了这个问题。我重写了caretRectForPosition:并在错误发生之前发现editedMask==0和editedRange==(NSNotFound,0)。我如何找出导致此问题的原因?(我需要在生产环境中使用自定义UITextView类,但可以使用标准类进行测试)。我所有的beginEditing和endEditing呼叫都是成对的。任何想法都值得赞赏!谢谢@我不记得这个具体的问题,但我通常也会做类似的事情,所以也许这会有所帮助。当NSTextStorage中有我想要响应的编辑或其他内容时,我会将一个变量(如
needsUpdate
)设置为true。在
processEditing
中,我调用
super
,然后如果设置了该标志,我将做一些工作。也许试一下?昨晚就想出来了——更像是“拍额头”的时刻。问题是macOS遗留的代码行添加了第二个layoutmanager。这在某种程度上导致了iOS上的一个问题,并解释了为什么它在股票UITextView上工作正常。(是的,我自己也做了一些类似的过程编辑——到目前为止效果很好!)感谢您的回复!!!也解释了为什么我的诊断没有发现任何有用的东西——sttextstorage本身没有问题。