Подтвердить что ты не робот

Завершение приложения из-за неперехваченного исключения "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 продолжает давать ту же проблему.

Что мне делать?

4b9b3361

Ответ 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, щелкните правой кнопкой мыши значок "Файл" (значок желтого куба), который откроет список просмотров и точек и удалит ссылку, сняв флажок справа.