Handbuch modal segue nicht funktioniert, View-Controller ist nicht in der Fenster-Hierarchie?
Ich habe lange gesucht im web und Stack Overflow für Stunden und ich kann nicht dieses Problem beheben. hier hofft man alle sehen, mein Fehler, da ich einfach nicht finden kann.
Habe ich eine einfache storyboard-basierten Anwendung, die ich gerade begonnen. Der Initiale ViewController ist eine Instanz von UITabBarController mit den beiden dummy-ViewControllers aus der Vorlage. Beim starten ich brauche, um zu überprüfen, ob das Gerät angemeldet ist, einen externen Dienst. Wenn nicht werde ich anzeigen eines modalen ViewController, der Benutzer zum authentifizieren, wenn das Gerät authentifiziert ist, dann will ich einfach nur zeigen, die FirstViewController.
Folgende Schritte sind alles, was ich getan haben da Sie das Projekt erstellen:
- Erstellen der AuthenticateViewController-Szene auf dem Storyboard
- Erstellen von code-Dateien für AuthenticateViewController, und ordnen Sie der entsprechenden Szene
- Erstellen von code-Dateien für einen UITabBarController Unterklasse, und ordnen Sie die ersten UITabBarController-Szene, die neue Unterklasse
- Erstellen Sie einen neuen übergang auf dem storyboard aus der UITabBarController-Szene auf dem AuthenticateViewController Szene
- Manuell aufrufen der Wechsel von
viewDidLoad
im UITabBarController Unterklasse
Wenn ich mit der Anwendung der modal-segue nicht Feuer, die ersten ViewController des UITabBarController ist gezeigt, und ich bekomme die folgende Ausgabe in XCode:
Warning: Attempt to present <AuthenticateViewController: 0x83c0c10> on <EPTabBarController: 0x83be600> whose view is not in the window hierarchy!
Entsprechenden code unten, in der Tat ist der einzige code den ich eingegeben habe, so weit. Bitte lassen Sie mich wissen, wenn screenshots oder weitere Informationen würden nützlich sein. Vielen Dank im Voraus für Eure 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist innerhalb
Sie versuchen, eine andere Ansicht(
AuthenticateViewController
) während der aktuellen Ansicht(EPTabBarController
) noch nicht geladen ist in die Fenster-Hierarchie.Also lassen Sie uns zuerst Ihre
EPTabBarController
zu bekommen, geladen, im Fenster Hierarchie und den dannAuthenticateViewController
.Geben diesem einen Versuch
Wie über den Aufruf einfach Ihren code in viewDidAppear?
Allerdings bin ich immer noch unzufrieden mit diesen Lösungen, weil die ursprüngliche Ansicht zeigt noch bis zum Bruchteil einer Sekunde.
Irgendeine Idee, wie um zu zeigen, das neue modal, ohne sich mit dem ursprünglichen Ansicht zuerst?
Wenn Sie wirklich wollen, um die Kontrolle, verwenden Sie so etwas wie dieses:
Diesem Feuer wird die Segue
pushToMainView
wenn Sie die Nachricht[controller pushToMainView]
aber zurück hält, bis die Ansicht geladen wird.