UINavigationController 'beschädigt navigation bar" - Problem
Ich habe ernsthafte Probleme damit, meinen navigation controller zu arbeiten und haben versucht, so ziemlich jede Frage im Zusammenhang mit auf dieser website.
Mein problem ist, dass wenn ich eine segue programmgesteuert, es scheint sich ein übergang in der Navigationsleiste, aber die Aussicht ändert sich nicht. Ich sehe die folgenden Fehler statt:
2013-10-22 13:47:30.059 App[2236:a0b] nested push animation can result in corrupted navigation bar
2013-10-22 13:47:30.411 App[2236:a0b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2013-10-22 13:47:30.501 App[2236:a0b] Unbalanced calls to begin/end appearance transitions for
Mein storyboard sieht so aus:
In LoginViewController führen wir eine überleitung basiert auf einer Bedingung:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear];
NSString* appState = [AppConfig getAppState];
if ([appState isEqualToString:APP_STATE_WAITING]) {
[self performSegueWithIdentifier:@"Load" sender:self];
}
else if ([appState isEqualToString:APP_STATE_REGISTRATION_AVAILABLE]) {
[self performSegueWithIdentifier:@"SignUp" sender:self];
}
}
In LoadingViewController wir warten auf eine Antwort von einem web service bevor Sie das tun:
- (void)segueToWaitingList:(NSUInteger)behind inFront:(NSUInteger)inFront
{
[MosaycOptions setAppState:APP_STATE_WAITING];
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"Waiting" sender:self];
});
}
Und es ist dieser übergang, der mir das problem. Die nav-bar übergänge aber in der Ansicht nicht und wir sehen die folgenden Fehler ausgedruckt:
2013-10-22 13:47:30.059 App[2236:a0b] nested push animation can result in corrupted navigation bar
2013-10-22 13:47:30.411 App[2236:a0b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2013-10-22 13:47:30.501 App[2236:a0b] Unbalanced calls to begin/end appearance transitions for
Die app stürzt nicht ab, aber kein übergang Auftritt, wird es nicht der übergang auf die Warteliste anzeigen, aber bleibt einfach beim Laden und druckt die Fehler auf die Konsole. Wenn ich die zurück-Taste drücken, anstatt Sie zurück zum login-screen bekomme ich die folgende leere Bildschirm:
Wenn ich drücken Sie wieder stürzt es ab mit dieser Fehlermeldung: http://pastebin.com/7mCyeQv9
Etwas ist offenbar immer Durcheinander mit den Navigations-stack, jedoch habe ich geprüft, es mit dem debugger und es sieht absolut in Ordnung, alles wird geschoben, als normal. Ich kann nicht für das Leben von mir herausfinden. Dies ist nur eine standard-navigation controller-setup, das ich verwendet habe, vor.
Irgendwelche Ideen?
Guter Punkt, war übrig von einem anderen Ort. Das entfernen dieser nicht etwas ändern.
Sie sollten mit viewDidAppear:(BOOL)animated - Methode nicht viewDidAppear
Sollte Sie nicht anrufen
performSegueWithIdentifier
auf Ihre UINavigationController
? I. e. rufen Sie [self.navigationController performSegueWithIdentifier:...]
statt [self performSegueWithIdentifier:...]
?Warum nennst du performSegue auf navigation-controller??? Es ist nur ein wrapper, müssen Sie entweder root-oder top-view-controller.
InformationsquelleAutor Michael | 2013-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich endlich herausgefunden, das problem.
performSegueWithIdentifier
aufgerufen wurde, bevorviewDidAppear
genannt wurde, auf die LoadingViewController. Ein Synchronisations-Fehler, im Grunde.Von was ich mich erinnere, wurde eine race-condition zwischen einem Netzwerk-Antwort kicking off ein segue und die Methode viewDidAppear der übergang view aufgerufen wird. Ich glaube, ich hatte gerade zwei Boolean, der angibt, dass die Antwort empfangen worden waren und eine Angabe viewDidAppear berufen worden war, und dann verwendet diese, um zu entscheiden, ob top-kick-off der segue.
InformationsquelleAutor Michael
Sollten Sie nicht durchführen segue in viewDidLoad.
Versuchen Sie, in viewDidApperar:
Apple Dokumentation:
Es sollte funktionieren. Ich hatte die gleichen Probleme mit ihm.
Ich zog es in viewDidAppear bekomme aber das gleiche Problem.
Look dropbox.com/s/o0xoi4sjld5oo9d/AKSimpleSegue.zip
InformationsquelleAutor adnako