2016-09-28 40 views
0

我實現了一個簡單的drfat存儲UITextView我在應用程序中使用。一切工作正常,但是當我找回這個草案,將其分配給UITextView,並設置selectedRange(也有的儲值)我得到這個怪異警告:設置UITextView中的光標位置產生警示

requesting caretRectForPosition: with a position beyond the NSTextStorage (4) 

從我注意到的東西.. 。這隻發生在短於4個字符的字符串上(這可能會提供一些線索,因爲警告消息中也會出現4)。
它可能有助於TI發佈實際分配的代碼,所以這裏是:

self.textView.text = savedDraft.text; 
self.textView.selectedRange = NSMakeRange(savedDraft.cursorPosition, 0); 

你有什麼想法,有什麼可以產生這樣的警告?我發現here這可能是由於UITextView的Swift實現引起的,但我們是純粹的Objective-C。


更新:

當我保存我做這location保存爲NSUInteger,我把它從我UITextView這樣的:

self.textView.selectedRange.location 

所以,如果你考慮一個簡單的「你好「消息(兩個字符)我得到這樣的日誌的形式保存和檢索方法:

Get draft position: 0 
Saving draft position: 2 
Get draft position: 2 
+0

嘗試此鏈接http://stackoverflow.com/questions/8891072/how-to- set-the-the-position-of-the-cursor-in-uitextview – Pushkraj

+0

「savedDraft.cursorPosition」出現時的值是什麼? – Larme

+0

我認爲應該保存Draft.text.cursorPosition – Pushkraj

回答

0

看起來UIKeyboardWillShowNotification在這裏扮演重要的角色,當everywhing在viewDidLoad發生它會造成衝突。 看來,鍵盤的表現也影響插入位置,當我手動更改self.textView.selectedRange我做的太快,所以這個鍵盤notifiaction衝突。

對我來說,解決辦法是簡單地把這個selectedRange件事塊與一些非常小的延遲是這樣的:

@weakify(self) 
[JDLDispatchUtils asyncOnMainAfter:0.01 block:^{ 
    @strongify(self) 
    self.textView.text = savedDraft.text; 
    self.textView.selectedRange = NSMakeRange(savedDraft.cursorPosition, 0); 
}];