Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency',

[亡魂溺海] 提交于 2019-11-29 06:03:06

I had the same exception on iOS 8 and now fixed as the following codes.

The point is, you should not add an input view as a child view of view controller's view. (I have no idea why the code worked well in iOS 7 is no longer working well in iOS 8.)

Before (occurs error)

UITextField* someTF;
View* customView;
UIViewController *mainVC;

[mainVC.view addSubview:customView];
someTF.inputView = customView;

After (working well)

UITextField* someTF;
View* customView;
UIViewController *mainVC;

//  [mainVC.view addSubview:customView];  <-- delete this line
someTF.inputView = customView;
Jugal K Balara

For ios 8 If you are added UIPickerView on self.view:

[self.view addSubview:piker];

Please remove this line from your Code, then set:

textField.inputView = piker;

Thanks

UIDatePickerView should not be child class of any super view

Problem:

You have to ensure that the view you will assign to inputView or inputAccessoryView don't belong to any parent view. Maybe when you create these views from xib inside a ViewController, by default they are subviews of a superview.

Solution Tips:

Using method removeFromSuperview for view you will assign to inputView or inputAccessoryView

I had the same problem when I tried to setup my UIDatePicker in my UITextField

- (void)setupViews {
    ...
    dobField.inputView = aDatePicker; // Here was the problem
    ...
}

My solution, I just "alloc" and "init" my datePicker in 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;
    ...
}

I ran into this issue also. My code didn't have any addSubView but my xib has a UIView with another UIView inside. The UIView inside had an outlet to a UIView property as so:

@property(nonatomic, strong) IBOutlet    UIView *inputView;

What solved it was to open the xib, right click the "File's Owner" (yellow cube icon) which opens the list of views and outlets and deleting the link by unchecking the circle to the right.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!