由于未捕获的异常'UIViewControllerHierarchyInconsistency'而终止应用,

Mar*_*udo 13 uipickerview ios inputaccessoryview

当我在ios8崩溃中运行时,我在选择器上方创建了一个带有两个按钮的工具栏并在ios7上工作:

终止应用程序2到未捕获的异常'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;
Run Code Online (Sandbox Code Playgroud)

你知道我意识到这inputAccessoryView会导致应用程序崩溃,我还问过Apple的工程师,他们告诉我这是测试版的问题,但现在GM继续给出同样的问题.

我该怎么办?

小智 14

我在iOS 8上遇到了同样的例外,现在修复为以下代码.

关键是,您不应将输入视图添加为视图控制器视图的子视图.(我不知道为什么iOS 7中的代码运行良好,在iOS 8中不再运行良好.)

之前(发生错误)

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

[mainVC.view addSubview:customView];
someTF.inputView = customView;
Run Code Online (Sandbox Code Playgroud)

之后(运作良好)

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

//  [mainVC.view addSubview:customView];  <-- delete this line
someTF.inputView = customView;
Run Code Online (Sandbox Code Playgroud)


Jug*_*ara 6

对于ios 8如果在self.view上添加了UIPickerView:

[self.view addSubview:piker];
Run Code Online (Sandbox Code Playgroud)

请从您的代码中删除此行,然后设置:

textField.inputView = piker;
Run Code Online (Sandbox Code Playgroud)

谢谢