Завершение приложения из-за неперехваченного исключения "UIViewControllerHierarchyInconsistency",
Я создал панель инструментов над сборщиком с двумя кнопками и работал на ios7, когда я запускал сбой ios8:
Завершение второго приложения к исключенному исключению "UIViewControllerHierarchyInconsistency", причина: "дочерний вид" контроллер: должен Имейте родительский контроллер представления: но запрошенный родитель: '
Это фрагмент кода, который работал спокойно в ios7:
expiredPromoTextField.inputView = DatePicker;
expiredPromoTextField.delegate = self;
quantityPromoTextField.inputView = quantityPicker;
quantityPromoTextField.delegate = self;
// Create button to close the UIPickerView
UIToolbar * mypickerToolbar = [[UIToolbar alloc] initWithFrame: CGRectMake (0, 0, 320, 56)];
mypickerToolbar.barStyle = UIBarStyleBlackTranslucent;
[mypickerToolbar sizeToFit];
NSMutableArray * barItems = [[NSMutableArray alloc] init];
UIBarButtonItem * CancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel target: self action:selector (cancelDoneClicked)];
[barItems addObject: CancelBtn];
UIBarButtonItem * FLEXspace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target: self action: nil];
[barItems addObject: FLEXspace];
UIBarButtonItem * doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target: self action:selector (pickerDoneClicked :)];
[barItems addObject: doneBtn];
[mypickerToolbar setItems: barItems animated: YES];
[quantityPicker setShowsSelectionIndicator: YES];
expiredPromoTextField.inputAccessoryView = mypickerToolbar;
quantityPromoTextField.inputAccessoryView = mypickerToolbar;
Вы знаете, что я понял, что inputAccessoryView
собирается разрушить приложение, я также спросил инженеров Apple, и они сказали мне, что это проблема с бета-тестированием, но теперь с GM продолжает давать ту же проблему.
Что мне делать?
Ответы
Ответ 1
У меня было такое же исключение в iOS 8 и теперь исправлено как следующие коды.
Дело в том, что вы не должны добавлять представление ввода в виде дочернего представления представления контроллера вида.
(Я понятия не имею, почему код работал хорошо в iOS 7, больше не работает в iOS 8.)
До (происходит ошибка)
UITextField* someTF;
View* customView;
UIViewController *mainVC;
[mainVC.view addSubview:customView];
someTF.inputView = customView;
После (хорошо работает)
UITextField* someTF;
View* customView;
UIViewController *mainVC;
// [mainVC.view addSubview:customView]; <-- delete this line
someTF.inputView = customView;
Ответ 2
Для ios 8
Если вы добавили UIPickerView на self.view:
[self.view addSubview:piker];
Удалите эту строку из своего кода, а затем установите:
textField.inputView = piker;
Спасибо
Ответ 3
UIDatePickerView не должен быть дочерним элементом супер-представления
Проблема
Вы должны убедиться, что представление, которое вы назначите inputView или inputAccessoryView, не относится к какому-либо родительскому представлению. Может быть, когда вы создаете эти представления из xib внутри ViewController, по умолчанию они являются областями надстройки.
Советы по решению:
Используя метод removeFromSuperview для просмотра, вы назначаете inputView или inputAccessoryView
см. подробности в этой ссылке
Ошибка при добавлении вида ввода в текстовое поле iOS 8
Ответ 4
У меня была такая же проблема, когда я пытался настроить мой UIDatePicker в UITextField
- (void)setupViews {
...
dobField.inputView = aDatePicker; // Here was the problem
...
}
Мое решение, я просто "назначаю" и "запустил" мой datePicker в ViewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
...
aDatePicker = [[UIDatePicker alloc] init]; // My solution
// If you need UIDatePickerModeDate
aDatePicker.datePickerMode = UIDatePickerModeDate;
...
}
Ответ 5
Я столкнулся с этой проблемой. У моего кода не было никакого addSubView, но у моего xib есть UIView с другим UIView внутри. У UIView внутри был выход в свойство UIView так:
@property(nonatomic, strong) IBOutlet UIView *inputView;
Решено было открыть xib, щелкните правой кнопкой мыши значок "Файл" (значок желтого куба), который откроет список просмотров и точек и удалит ссылку, сняв флажок справа.