2016-09-28 13 views
0

Я реализовал простой накопитель drfat для UITextView Я использую в приложении. Все работает отлично, но когда я получить этот проект, присвоить его UITextView и установить selectedRange (также некоторое сохраненное значение) Я получаю эту странно предупреждение:Настройка положения курсора UITextView генерирует предупреждение

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

Из вещей, которые я заметил .. . Это происходит только для строк, длина которых меньше 4 символов (это может дать некоторые подсказки, потому что 4 также появляется в предупреждающем сообщении).
Это может быть полезно ти опубликовать фактический код назначения, так вот она:

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

У вас есть какие-либо идеи, что может генерировать такого рода предупреждения? Я нашел here, что это может быть вызвано реализацией Swift UITextView, но мы чисты Objective-C.


Update:

Когда я сохраняю я сохранить этот 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-position-of-the-cursor-in-uitextview – Pushkraj

+0

Какова ценность 'savedDraft.cursorPosition', когда она появляется? – Larme

+0

Я думаю, что он должен быть сохраненDraft.text.cursorPosition – Pushkraj

ответ

0

Похоже, UIKeyboardWillShowNotification играет здесь большую роль, и когда все происходит в 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); 
}];