Сбой при выделении и удалении текста из меню в UITextView - PullRequest
0 голосов
/ 08 ноября 2011

Мои UITextViews вызывают сбой приложения при выделении и удалении текста.

enter image description here

Вырезание, копирование и вставка работают нормально. Единственная ошибка в журнале:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIMenuController view]: unrecognized selector sent to instance 0xff85ac0'

Это обычный UITextView, и UIMenuController не тронут и не настроен. Есть идеи?

Происходит с iOS 4.3 и 5.0 в симуляторе и на устройстве.

Нет больше информации с включенными зомби, за исключением трассировки стека, которую мне нужно будет интерпретировать. Новый Xcode не очень хорош в этом:

(0x356338bf 0x360ae1e5 0x35636acb 0x35635945 0x35590680 0x37c63925 0x3816b 0x1a557 0x3559222b 0x37a869a7 0x3559222b 0x31671943 0x35607a63 0x356076c9 0x3560629f 0x355894dd 0x355893a5 0x32073fed 0x3794d743 0x29d1 0x2990)

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Причина была недокументирована (исправьте меня, если вы найдете документацию, и я обновлю этот ответ) поведение от UITextView и UITextField с использованием по умолчанию UIMenuController.Опция «Удалить» добавляется, если ваш UIText * Delegate реализует delete:.Когда в меню выбрано «Удалить», делегат вашего поля будет вызываться с сообщением delete:.Я обнаружил это, добавив точку останова исключения в области списка точек останова, которая дала мне правильно обозначенную трассировку стека, чего не было в исходном исключении.Сбой произошел из-за того, что я использовал delete:(id)sender для обслуживания элементов панели кнопок способом, который требовал использования отправителя.Я исправил это, переименовав delete: в deletePart:.Пользователь по-прежнему может удалить текст, выбрав «Вырезать».

1 голос
/ 08 ноября 2011

Отправка view на UIMenuController означает, что вы, вероятно, назначили UIMenuController туда, куда он не должен идти. Посмотрите, если вы установите что-либо равным menuController (или какому-либо другому имени переменной вашего экземпляра) и посмотрите, не вызывает ли это проблему.

Кроме того, это может быть перевыпуск, происходящий намного раньше в коде, где UIMenuController просто выделяется в области памяти, которая раньше была занята чем-то, что было выпущено слишком рано. Включите NSZombies и посмотрите, на что изменится ваша ошибка.

...