Mam stalówkę z elementu głównego kontrolera widoku tak:Jak załadować XIB za pomocą ViewController najwyższego poziomu?
więc mogę umieścić elementy w stosunku do górnych i dolnych prowadnic układ z wykorzystaniem automatycznego układu.
Kiedy po raz pierwszy próbował załadować stalówkę korzystając
SearchViewControllerPro* searchViewController = [[SearchViewControllerPro alloc]initWithNibName:@"SearchViewControllerPro" bundle:[NSBundle mainBundle]];
mam następujący wyjątek czasu wykonywania:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "SearchViewControllerPro" nib but the view outlet was not set.'
googlowania błąd został wskazał mi, że właściciel pliku xib musi być ustawiony na klasę mojego kontrolera widoku, a wylot widoku musiał zostać ustawiony na obiekt widoku w Xib. Jeśli mam to zrobić, wtedy pojawia się następujący błąd czasu wykonywania:
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 .'
Nie dziwi ponieważ widok jest związany zarówno właściciela pliku i kontrolera widoku najwyższego poziomu stalówki. Ale w jaki sposób mogę powiedzieć biegiem czasu, że są one w rzeczywistości tym samym, a nie dwoma odrębnymi bytami?
Edit: Kiedy próbuję unpck się ViewController od stalówki jak tak,
NSArray* xibContents = [[NSBundle mainBundle] loadNibNamed:@"SearchViewControllerPro" owner:nil options:nil];
SearchViewControllerPro* mapSearchViewController = [xibContents lastObject];
, to jednak nie dobre albo:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.
rozwiązanie tymczasowe:
Znalazłem rozwiązanie, ale nie jest ładne. Pomimo struktury pokazanej w IB, kontroler widoku nie jest ostatnim obiektem w Xib. Tak więc mam:
__block SearchViewControllerPro* mapSearchViewController = nil;
[xibContents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[SearchViewControllerPro class]]) {
mapSearchViewController = obj;
}
}];
i wydaje się, że działa bez przestojów w czasie wykonywania. Jednak to wszystko, ale czysty kod.
chodzi o edycję .. masz błędy w stalówkę. Musisz upewnić się, że nazwy klas są poprawne i musisz ręcznie rozłączyć wszystkie niepoprawne połączenia. Co ustawiłeś jako klasę FilesOwner? Jakie połączenia nawiązałeś do FilesOwner? – hooleyhoop
OK, nie ma znaczenia, co ustawiłeś w klasie FilesOwner tak długo, jak zdajesz sobie sprawę, że to się zmieni w zależności od tego, czy robisz [NSBundle mainBundle] loadNibNamed: ... lub przydzielaj SearchViewControllerPro] initWithNibName: ... dlatego wszelkie połączenia z Tobą dokonane w FilesOwner będą nieważne (ulegniesz awarii), jeśli zmienisz metodę ładowania – hooleyhoop