Ich habe das Web und Stack Overflow seit Stunden gesucht und kann dieses Problem nicht lösen. Ich hoffe, ihr seht meinen Fehler, weil ich ihn nicht finden kann.Manueller modaler Übergang funktioniert nicht, View Controller ist nicht in der Fensterhierarchie?
Ich habe eine einfache Storyboard-basierte Anwendung, die ich gerade begonnen habe. Der anfängliche ViewController ist eine Instanz von UITabBarController mit den beiden Dummy ViewControllern aus der Vorlage. Beim Start muss ich prüfen, ob das Gerät bei einem externen Dienst angemeldet ist. Wenn nicht, werde ich einen modalen ViewController zeigen, der dem Benutzer erlauben wird, sich zu authentifizieren, wenn das Gerät authentifiziert wird, dann zeige ich nur den FirstViewController.
Die folgenden Schritte sind alles, was ich seit der Erstellung des Projekts durchgeführt haben:
- die AuthenticateViewController Szene auf der Storyboard erstellen
- für AuthenticateViewController erstellen Code-Dateien, und ordnen sie der entsprechenden Szene
- erstellen Codedateien für eine UITabBarController-Unterklasse, und verknüpfen Sie die ursprüngliche UITabBarController-Szene mit dieser neuen Unterklasse.
- Erstellen Sie ein neues Segment auf dem Storyboard von der UITabBarControllerszene zum Authenti cateViewController Szene
- manuell segue von
viewDidLoad
in der Unterklasse UITabBarController nennen
Wenn ich die Anwendung der modale segue läuft nicht, der erste Viewcontroller des UITabBarController Feuer gezeigt, und ich erhalte die folgende Ausgabe in XCode :
Warning: Attempt to present <AuthenticateViewController: 0x83c0c10> on <EPTabBarController: 0x83be600> whose view is not in the window hierarchy!
Relevanter Code unten, tatsächlich der einzige Code, den ich bis jetzt hinzugefügt habe. Bitte lassen Sie mich wissen, wenn Screenshots oder zusätzliche Informationen nützlich wären. Vielen Dank im Voraus für Ihre Hilfe.
EPTabBarController, Unterklasse von UITabBarController:
#import "EPTabBarController.h"
#import "AuthenticateViewController.h"
@interface EPTabBarController()
@end
@implementation EPTabBarController
- (void)viewDidLoad
{
[super viewDidLoad];
[self performSegueWithIdentifier:@"authenticationSegue" sender:self];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Das funktioniert, aber scheint mir eine eher unelegante Lösung. Ist das der einzige Weg dies zu erreichen? Sollte der Aufruf 'performSegueWithIdentifer:' an einen anderen Ort verschoben werden? – blundin
Hey @blundin bitte versuche nachAbsetzen: 0.0 und check. lass mich wissen, ob funktioniert glatt –
Ja, das funktioniert reibungslos. Vielen Dank. – blundin