UITextView приводит к сбою приложения, когда вызывается становлениеFirstResponder

У меня UITextView в UIView. При просмотре загрузки у меня было UIPickerView внутри UIAlertView с кнопкой "ОК". Когда я выбираю любое значение из средства выбора и нажимаю "ОК", мне нужно сделать UITextView активным.
Для этого я написал [<myTextView> becomeFirstResponder]; метод делегата UITextView. Как только этот метод выполнится, он вызовет метод делегата textViewShouldBeginEditing. Этот метод выполняется правильно, и здесь я возвращаю TRUE, но после этого выполнение возвращается к строке [<myTextView> becomeFirstResponder];, а затем приложение аварийно завершает работу.
UIAlertView Метод делегата выглядит следующим образом:

- (void)customIOS7dialogButtonTouchUpInside: (CustomIOS7AlertView *)alertView clickedButtonAtIndex: (NSInteger)buttonIndex
{
    NSLog(@"Button at position %d is clicked on alertView %d.", (int)buttonIndex, (int)[alertView tag]);
    [alertView close];
    [self.updateTV becomeFirstResponder];
}

Здесь, в приведенном выше коде, сбой приложения на [self.updateTV becomeFirstResponder];
Журнал сбоев показан ниже:

2016-12-09 11:47:53.069049 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.069451 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.070530 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.070970 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.071223 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.072122 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.132574 oGoing[250:11235] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2016-12-09 11:47:53.136872 oGoing[250:11235] [MC] Reading from public effective user settings.
2016-12-09 11:47:53.370813 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.372515 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.372781 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.373559 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.373942 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.374133 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.374921 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.477836 oGoing[250:11235] *** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x6e208f0> should have parent view controller:<OGAddUpdateViewController: 0x17bebe00> but requested parent is:<UIInputWindowController: 0x17b81400>'
*** First throw call stack:
(0x1c38de07 0x1b5f3077 0x1c38dd4d 0x2146dd8b 0x21d43ba3 0x21d448cd 0x213e11bb 0x21d44655 0x21d3d1c9 0x21497b8f 0x213f9153 0x21456e15 0x21457181 0x2157ff83 0x1b04f5 0x287bb5 0x2140895d 0x214088eb 0x213f2a87 0x21408213 0x21407d5f 0x21402947 0x213d37c9 0x21b73c39 0x21b6d8db 0x1c349c8b 0x1c349795 0x1c347a6b 0x1c297073 0x1c296e81 0x1da3fbfd 0x2143eacf 0x21439201 0xed585 0x1ba6250b)
libc++abi.dylib: terminating with uncaught exception of type NSException

Помоги мне выбраться из этого. Я застрял в этом уже 2 дня.
Мой проект уже есть в AppStore, и он работает правильно. Но когда я запускаю его на устройстве iOS 10, возникает эта проблема.

Заранее спасибо


person Er. Vihar    schedule 09.12.2016    source источник
comment
обновите свой вопрос с помощью кода метода текстового поля textViewShouldBeginEditing   -  person Himanshu Moradiya    schedule 09.12.2016
comment
Вы использовали [<myTextView> becomeFirstResponder]; дважды?   -  person Bista    schedule 09.12.2016
comment
@ Mr.Bista Нет. Я использовал этот метод один раз. И @ Himanshu Moradiya Я использовал UITextView в своем кодировании, и связанный с ним метод делегата - это только textViewShouldBeginEditing. Поэтому я думаю, что нет необходимости обновлять вопрос.   -  person Er. Vihar    schedule 09.12.2016
comment
@Er.Vihar, его проблема с вашим текущим запросом viewconroller отличается. вы представляете контроллер UICompatibilityInputViewController, но его ссылка на контроллер OGAddUpdateViewController и то же текстовое поле в UIInputWindowController, поэтому проверьте этот контроллер   -  person Himanshu Moradiya    schedule 09.12.2016
comment
UIView - это вид по умолчанию, или вы программно создаете один UIview и добавляете его в основной вид.   -  person Himanshu Moradiya    schedule 09.12.2016
comment
Это вид по умолчанию. Мой проект уже есть в AppStore и работает корректно. Но когда я запускаю его на устройстве iOS 10, возникает эта проблема.   -  person Er. Vihar    schedule 09.12.2016
comment
@Эр. Вихар, можешь, пожалуйста, опубликовать код, где произошел сбой?   -  person KSR    schedule 09.12.2016
comment
@ Sathi Reddy Я обновил свой вопрос, указав код, в котором происходит сбой приложения.   -  person Er. Vihar    schedule 09.12.2016
comment
хорошо я проверяю..   -  person KSR    schedule 09.12.2016
comment
Один раз прокомментируйте его [self.updateTV beFirstResponder] и выполните. Пожалуйста, сообщите, происходит ли сбой.   -  person KSR    schedule 09.12.2016
comment
@ Mr.Bista @ Himanshu Moradiya @ Sathi ReddyСпасибо всем за ваш отличный ответ и время, чтобы помочь мне решить эту проблему.   -  person Er. Vihar    schedule 09.12.2016


Ответы (1)


Попробуйте это, пока работает...

Я столкнулся с этой проблемой раньше.

Проблема:

Вы должны убедиться, что представление, которое вы назначите для inputView или inputAccessoryView, не принадлежит ни одному родительскому представлению. Когда вы создаете эти представления из xib внутри ViewController, по умолчанию они устанавливаются как подпредставления суперпредставления.

Советы по решению:

Используйте метод removeFromSuperview для представления, которое вы назначите для inputView или inputAccessoryView.

из: https://stackoverflow.com/a/25882277/3901620

в то время как из xib:

[self.DatePickerView removeFromSuperview];
[Textfield setInputView:self.DatePickerView];
[Textfield setInputView:self.DatePickerView];
person KKRocks    schedule 09.12.2016