2015-12-02 11 views
5

Ich habe den Fehler vor kurzem bekommen:Anfordern caretRectForPosition: Während die NSTextStorage hat hervorragende Änderungen

requesting caretRectForPosition: while the NSTextStorage has oustanding changes {x, x} 

* „Oustanding“ ist wörtlich, was er sagt, und ist nicht meine Tippfehler.

Dies genannt wird, wenn ich durch die NSTextStorage eine Unterklasse von NSTextView mit dem enumerateAttribute() Verfahren am Iterieren und Manipulation des NSTextAttachment s in der Textansicht nach jeder Änderung in der Textansicht.

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() 
    } 
} 

Fragen wie this scheinen online zu sein, aber ich habe noch keine Vorkommen dieser zu finden und scheint iOS 9 nur relevant.

Dies passiert nur, wenn eine physische Tastatur auf dem iPad verwendet wird.

+0

Happens für mich mit oder ohne eine physische Tastatur in 9.2. –

+0

@SamSoffes Haben Sie zufällig eine der caret-bezogenen Methoden überschrieben? –

+0

Nein. Ich mache aber ein paar komplizierte Sachen. Habe keine Zeit damit verbracht zu versuchen, es zu vereinfachen, um es herauszufinden. –

Antwort

5

Das passiert, wenn Sie caretRectForPosition aufrufen (oder eine Methode, die wie firstRectForRange aufruft), während der Textspeicher bearbeitet hat.

Ich war in der Lage, diese Protokolle zu verhindern, indem einige Sachen verzögert, bis nach endEditing in der NSTextStorage und dispatch_async an die Hauptwarteschlange aufgerufen wird, um meine Arbeit zu tun. Es gibt keine sichtbaren UI-Blitze oder irgendetwas als Ergebnis des Async.

Es muss einen besseren Weg geben, das zu lösen, aber das ist alles, was ich herausfinden konnte.

+0

Aktuelle Updates zu diesem Thema? Ich bekomme die gleiche Fehlermeldung mit dem Fehler –

-2

Gott, ich löse gerade das Problem jetzt. Sie müssen Ihren custome Speicher auf andere Weisen besitzen. glauben Sie mir einfach und versuchen Sie es

+0

Haben Sie weitere Erklärungen zu diesem "Fix"? – siburb

+2

Willkommen bei stackoverflow !! Bitte benutzen Sie das Kommentarfeld unten. Sobald Sie genügend Reputation haben, können Sie jeden Beitrag kommentieren. :) –

Verwandte Themen