Итак, я работаю над этой ошибкой уже около недели, а для жизни я не могу понять, что происходит.UITextView запустит приложение iPad из textViewShouldBeginEditing. (Invalid Glyph Index)
Из-за проблем с конфиденциальностью я не могу опубликовать слишком много кода, но я сделаю все возможное, чтобы все объяснить.
Что происходит, так это то, что мы заполняем UITextField с помощью кода и изначально выделяем текст серым цветом. Затем пользователь может сделать одну из двух вещей:
1) Нажмите кнопку с надписью «commit» и вызывается метод, который выполняет следующий метод: «commitData». Он выполняет следующие функции:
- Регистров фиксацию с отменами менеджером
- Изменяет текст от серого до черного
- регистра с нашим приложением, что текстовое поле было обновлено и должно быть сохранено при закрытии программы
2) Нажмите на текстовое поле с выделенным серым текстом, который затем вызывает следующий метод appleViewShouldBeginEditing по умолчанию. Отсюда мы называем наш метод «commitData» перечислены от варианта 1 следующим образом:
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
if ([[self box] hasGreyedOutText])
[[self box] commitData];
[self setActiveTextView:textView];
return YES;
}
вопрос мы с, что нажав на кнопку, чтобы зафиксировать неактивны текст отлично работает, и мы бежим в каких-либо проблем ,
ОДНАКО
Когда мы нажмите на текстовое поле и вызвать метод textViewShouldBeginEditing, наши IPADS может замерзнуть и сделать ожидание пользователя в течение нескольких минут, прежде чем закончить. Когда я подразумеваю замораживание, я имею в виду, что весь iPad замерзает. IPad-часы даже не будут обновляться, пока это происходит.
Когда это происходит, мы получаем код ошибки в консоли, которая говорит:
!!! _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 2147483647
Мы можем получить код ошибки выше, чтобы увидеть из всех наших аппаратных средств, когда после вышеуказанных шагов, но может воспроизводить только замораживание на iPad 2 (с 100% точностью).
- Заметка об этом, мой сотрудник обнаружил через диагностику, что у нас только около 8 МБ свободной ОЗУ при возникновении этой ошибки. Мы только когда-либо ударили эту маленькую ОЗУ на iPad 2, так что это может быть просто совпадением.
У меня есть ощущение, что это может быть связано с потоками, и что мы, возможно, придется как-то называть наш метод после возвращения YES из метода textViewShouldBeginEditing, но я не совсем уверен, как я должен идти об этом.
Если у кого-нибудь есть идеи о том, как исправить это, или даже идеи, которые могли бы указать мне в правильном направлении, я был бы невероятно благодарен. Я искал всюду, о чем я могу подумать, и ни одно из решений, которые я нашел, связанные с кодом ошибки, не закончилось.
Ты герой. Ваше исправление отлично работает. Мы обновляли элементы пользовательского интерфейса из вызовов, создаваемых внутри этого метода textViewShouldBeginEditing, который, по-видимому, не работает в основном потоке. –