2014-09-10 23 views
13

ho creato una barra degli strumenti sopra il selettore con due pulsanti e lavorato su iOS7, quando ho eseguito in iOS 8 incidente:terminazione app a causa di non rilevata eccezione 'UIViewControllerHierarchyInconsistency',

terminazione app due a eccezione non identificata 'UIViewControllerHierarchyInconsistency ', la ragione: 'bambini regolatore: Dovrebbe Hanno controller della vista genitore: ma richiesto genitore è:'

Questo è il pezzo di codice che ha lavorato tranquillamente in 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; 

Sai cosa ho capito è che inputAccessoryView sta per mandare in crash l'applicazione, ho chiesto anche gli ingegneri di Apple e mi hanno detto che era un problema con la versione beta, ma ora con il GM continua a dare lo stesso problema.

Cosa devo fare?

+0

mostra il registro delle eccezioni. – rptwsthi

+0

Registri errori post. –

+0

Anche questo problema si verifica con inputAccessoryView. Nel nostro caso stiamo provando a impostare l'inputaccessoryView su una vista "parent" definita nell'XIB che specifica UitextView e un pulsante. Quando l'utente fa clic su UITExtView, la tastiera dovrebbe scorrere verso l'alto e UITExtView e il tasto scorrere verso l'alto (come parte della vista accessoria). Ha funzionato bene in IOS7. Non ho ancora idea della correzione ... – harshaw

risposta

12

Ho avuto la stessa eccezione su iOS 8 e ora fisso come i seguenti codici.

Il punto è, non si dovrebbe aggiungere una vista di input come vista secondaria della vista del controller della vista. (ho idea perché il codice funzionava bene in iOS 7 non funziona bene in IOS 8.)

Prima (verifica errore)

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

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

Dopo (funziona bene)

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

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

per iOS 8 Se si sono aggiunti UIPickerView su self.view:

[self.view addSubview:piker]; 

Si prega di rimuovere questa riga dal codice, quindi impostare:

textField.inputView = piker; 

Grazie

+0

Mi trovavo ad affrontare problemi come quelli di seguito (è stato a causa di UIPicker come hai detto nella tua risposta) e la tua risposta ha risolto il mio problema. Grazie. --------------------------------- 'UIViewControllerHierarchyInconsistency', motivo: 'controller di visualizzazione figlio: dovrebbe avere un controller di visualizzazione padre: ma il genitore richiesto è: ' che termina con eccezione non rilevata di tipo NSException abort() chiamato – zapoo

+0

si prega di aggiungere commenti in formato leggibile @zapoo – Saranjith

0

Ho avuto lo stesso problema quando ho cercato di impostare il mio UIDatePicker nel mio UITextField

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

La mia soluzione, ho appena "allocare" e "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; 
    ... 
} 
3

UIDatePickerView non dovrebbe essere bambino di qualsiasi super-vista

Problema:

È necessario garantire che la vista che si assegnerà al inputView o inputAccessoryView non appartengono ad alcuna vista primaria. Forse quando crei queste viste da xib all'interno di un ViewController, per impostazione predefinita sono subviews di una superview.

Consigli Soluzione:

utilizzando il metodo removeFromSuperview per la vista che si assegnerà al inputView o inputAccessoryView

vedi particolare in questo link

Error when adding input view to textfield iOS 8

0

mi sono imbattuto in questo problema anche. Il mio codice non ha nessun addSubView ma il mio xib ha un UIView con un altro UIView all'interno. L'UIView interno aveva uno sbocco a una proprietà UIView come così:

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

Che risolto era di aprire la XI ter, fare clic destro del "Manuale di file" (giallo icona cubo), che si apre l'elenco dei punti di vista e punti vendita e cancellando il collegamento deselezionando il cerchio a destra.

Problemi correlati