In meinem Code habe ich eine Funktion definiert, die das Delgate für Aktionen in einem Side-Menü ist, wenn Sie tippen Sie auf die Abmelden Aktion im Menü wird ausgeführt und die Funktion unten ist die Delegierten, die die Callback-Griffe:Swift self.performSegueWithIdentifier wird nach dem Zufallsprinzip nicht funktionieren
@objc func sideMenuAction(action: action) {
if(action == .Logout){
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.performSegueWithIdentifier("unwindToLogin", sender: self)
})
}
}
9 out of 10
mal das funktioniert gut und hat das erwartete Ergebnis des Benutzers zurück, die von wo auch immer in Navigationsstapel unwindToLogin
Kennung im Storyboard hat view-Controller einzuloggen geworfen werden sie auch sein mögen. aber das 1 mal funktioniert es nicht, wenn self.performSegueWithIdentifier
Zeile ausgeführt wird, passiert nichts! keine Fehler oder Warnungen und wenn dies passiert, wird die override func prepareForSegue
nicht aufgerufen, nachdem die Zeile ausgeführt wird!
Die andere Sache, die ich bemerkt habe, ist, dass, wenn dieses Problem ausgelöst wird, die CPU-Auslastung bei weit über 100% bleibt. Die übliche CPU-Auslastung der Apps beträgt maximal 30%/40% für nicht mehr als 1/2 Sekunden.
Es ist schwierig zu reproduzieren und wenn es passiert, kann ich nicht herausfinden, was vor sich geht. Suchen Sie hier nach Hinweisen, um mögliche Ursachen zu finden.
Die Ansicht Hierarchie sieht aus, als einmal folgende ich in der Lage war, das Problem zu reproduzieren:
(lldb) expr -l objc++ -O -- [UIViewController _printHierarchy]
<SWRevealViewController 0x12585ea00>, state: appeared, view: <SWRevealView 0x1256f3c70>
| <demoApp.MenuViewController 0x12575daa0>, state: appeared, view: <UIView 0x12743e670>
| <UINavigationController 0x126047000>, state: appeared, view: <UILayoutContainerView 0x125755270>
| | <demoApp.InitialViewController 0x125760050>, state: disappeared, view: <UIView 0x1256e2b30> not in the window
| | <demoApp.MainViewController 0x1257f11f0>, state: disappeared, view: <UIView 0x1257f8df0> not in the window
| | <demoApp.DetailViewController 0x127617250>, state: appeared, view: <UIView 0x1274f2280>
Ich sollte hinzufügen, dass die Anwendung zwei Strömungen hat die Auswirkungen der Ansicht Hierarchie:
Flow 1: User has never provided credential so Login View -> Initial View -> Main -> ......
Flow 2: User has already logged in once so Initial View -> Main -> .......
Der " abrollToLogin "Bezeichner gehört zum Abwickeln IBAction von Login View-Controller
Nur aus Neugier, warum haben Sie sich für dispatch_async entschieden? Ist die Ausführung nicht bereits im Hauptthread passiert? –
@AksharPatel Ich habe paranoid den Grund, warum es nicht funktioniert, ist irgendwie zur Zeit der Ausführung Ich bin zufällig in einem Seiten-Thread und so auf der sicheren Seite habe ich hinzugefügt, um zu sehen, ob es Dinge behebt. Es hilft offensichtlich nicht. – ke3pup
Sie haben die View-Controller-Hierarchie hinzugefügt. Großartig, also ist der Controller mit der Abwicklungsfunktion "IBAction" (nicht die, von der du kommst, sondern die, die du abwickelst) darin enthalten? Aus der Frage, welcher View Controller die Unclear "IBAction" implementiert hat, ist unklar. – Rob