由于未捕获exception“UIViewControllerHierarchyInconsistency”而终止应用程序,
我在两个button的select器上方创build了一个工具栏,并在ios7上运行,当我在ios8崩溃中运行时:
终止应用程序二未捕获的exception“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
会崩溃的应用程序,我也问苹果的工程师,他们告诉我,这是testing版的问题,但现在与通用汽车继续给出同样的问题。
我该怎么办?
我在iOS 8上遇到了同样的exception,现在修改为以下代码。
重点是,你不应该添加一个input视图作为视图控制器视图的子视图。 (我不知道为什么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;
对于ios 8如果您在self.view上添加了UIPickerView:
[self.view addSubview:piker];
请从您的代码中删除此行,然后设置:
textField.inputView = piker;
谢谢
UIDatePickerView不应该是任何超级视图的子级
问题 :
您必须确保您分配给inputView或inputAccessoryView的视图不属于任何父视图。 也许当你从一个ViewController里面的xib创build这些视图的时候,默认情况下他们是一个superview的子视图。
解决scheme提示
使用方法removeFromSuperview查看您将分配给inputView或inputAccessoryView
请参阅此链接的详细信息
将input视图添加到文本框iOS 8时出错
当我尝试在我的UITextField中设置我的UIDatePicker时,我遇到了同样的问题
- (void)setupViews { ... dobField.inputView = aDatePicker; // Here was the problem ... }
我的解决scheme,我只是“分配”和“初始化”我的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; ... }
我也遇到了这个问题。 我的代码没有任何addSubView,但我的xib有一个UIView与另一个UIView里面。 里面的UIView有一个UIView属性的sockets,如下所示:
@property(nonatomic, strong) IBOutlet UIView *inputView;
解决的办法是打开xib,右键点击“文件所有者”(黄色的立方体图标),打开视图和网点列表,并通过取消勾选右边的圆圈来删除链接。