Ho un pennino con un elemento radice vista controllore simili:Come caricare un XIB con un ViewController di primo livello?
così posso posizionare elementi relativi alle guide superiore ed inferiore di layout usando la configurazione automatica.
Quando ho provato a caricare questo pennino utilizzando
SearchViewControllerPro* searchViewController = [[SearchViewControllerPro alloc]initWithNibName:@"SearchViewControllerPro" bundle:[NSBundle mainBundle]];
ho ottenuto la seguente eccezione di runtime:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "SearchViewControllerPro" nib but the view outlet was not set.'
Googling l'errore è stato sottolineato a me, che il proprietario del file del xib doveva essere impostato sulla classe del mio controller di visualizzazione e il punto di vista doveva essere impostato sull'oggetto vista nello xib. Se lo faccio, allora ottengo il seguente errore di runtime:
Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'A view can only be associated with at most one view controller at a time! View > is associated with . Clear this association before associating this view with .'
non viene come una sorpresa poiché la vista è associata sia al proprietario del file e la vista di controllo di livello superiore del pennino. Ma come posso dire al tempo di esecuzione che sono entrambi la stessa cosa invece di due entità separate?
Edit: Quando provo a unpck il ViewController dal pennino in questo modo,
NSArray* xibContents = [[NSBundle mainBundle] loadNibNamed:@"SearchViewControllerPro" owner:nil options:nil];
SearchViewControllerPro* mapSearchViewController = [xibContents lastObject];
, non serve neanche:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.
soluzione temporanea:
Ho trovato una soluzione, ma non è carina. Nonostante la struttura mostrata in IB, il controller della vista non è l'ultimo oggetto nello xib. Così ho:
__block SearchViewControllerPro* mapSearchViewController = nil;
[xibContents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[SearchViewControllerPro class]]) {
mapSearchViewController = obj;
}
}];
e questo sembra funzionare senza arresti anomali di runtime. Tuttavia, è tutto tranne il codice pulito.
per quanto riguarda la modifica .. si hanno errori nel vostro pennino. È necessario assicurarsi che i nomi di classe siano corretti e che sia necessario disconnettere manualmente eventuali connessioni errate. Cosa hai impostato come classe di FilesOwner? Quali connessioni hai fatto a FilesOwner? – hooleyhoop
Ok non importa ciò che si imposta alla classe di FilesOwner finché si realizza che cambierà a seconda che si esegua [NSBundle mainBundle] loadNibNamed: ... o allocazione SearchViewControllerPro] initWithNibName: ... quindi qualsiasi connessione si aver fatto a FilesOwner non sarà valido (si bloccherà) se si modifica il metodo di caricamento – hooleyhoop