2017-04-18 3 views
0

Ich versuche, den Stammansicht-Controller vom didFinishLaunchingWithOptions des Anwendungsdelegaten zu ändern, je nachdem, ob der Benutzer angemeldet ist oder nicht. Sobald ich an diesem Zustand zu erhalten, verwende ich den folgenden Code Root-Ansicht-Controller zu ändern:Schwarzer Bildschirm beim Ändern des Stammansicht-Controllers in AppDelegate

self.window = UIWindow(frame: UIScreen.main.bounds) 
self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController 

self.window?.makeKeyAndVisible() 

Allerdings, wenn ich die App starten (mit einem gültigen angemeldeten Benutzer) der Simulator zunächst die Login-Bildschirm zeigt (alten Root-View-Controller) für eine Sekunde, dann wird der Bildschirm für etwa 30 Sekunden bis eine Minute schwarz, bevor schließlich der gewünschte View-Controller angezeigt wird.

Die View-Controller-Struktur in Storyboard ist wie folgt:

SWRevealViewController -> Navigation Controller -> Soll-View-Controller (neu root)

Der Grund für den Beginn mit SWRevealViewController wird, weil der Schieber Menü sonst verloren .

Irgendwelche Ideen, was passieren könnte?

+0

Können Sie den 'rootViewController' * vor * Sie den Fensterschlüssel und sichtbar machen? – NRitH

+0

@NRitH Das Ergebnis ist genau das gleiche. – rodrigochousal

+0

Könnten Sie ein bisschen mehr Code zeigen? Es wäre nützlich zu sehen, wie Sie den loginViewController einstellen und was diesen Code auslöst. –

Antwort

0

Hier ist ein Beispiel, das für mich funktioniert, machen Sie einfach Ihre loginViewControllers zu einem Stapel von UINavigationController, nicht im Zusammenhang mit SWRevealController. Es ist eine einfache Problemumgehung.

self.window = UIWindow(frame: UIScreen.main.bounds) 
if User.shared.firstLaunch { 
    let navigationVC = Storyboard.inital.instantiateViewController(withIdentifier: "firstLaunchNC") as! UINavigationController 
    self.window?.rootViewController = navigationVC 
} else if User.shared.token == "" { 
    let navigationVC = Storyboard.inital.instantiateViewController(withIdentifier: "initialVC") as! UINavigationController 
    self.window?.rootViewController = navigationVC 
} else { 
    self.registerForPushNotifications(application: UIApplication.shared) 
    User.shared.refreshToken() 
    let revealController = Storyboard.main.instantiateViewController(withIdentifier: "revealViewController") as! SWRevealViewController 
    self.window?.rootViewController = revealController 
} 

self.window?.makeKeyAndVisible() 
return true 
0

fand ich einen Weg, um ein ähnliches Ergebnis zu dem einen I erzeugen gewünscht wird. Es geht um nicht die Änderung der Wurzel-View-Controller überhaupt, und nachdem er einen „künstliche Wurzel-View-Controller“ nach dem Start präsentieren:

if let currentRoot = self.window?.rootViewController { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let artificialRoot = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") 
    currentRoot.present(artificialRoot, animated: false, completion: nil) 
} 

Obwohl nicht ideal, die Ergebnisse dieser Implementierung sind bei weitem besser als die Umsetzung in der Frage Beschreibung.

Verwandte Themen