Ich habe einen ViewController, um die Authentifizierung des Benutzers bei einer oAuth-API zu behandeln. Wenn es eine gespeicherte Token in user.defaults ist dieser Block läuftperformSegue (withIdentifier) schlägt in einer Instanz von viewController fehl
FRDStravaClient.sharedInstance().fetchCurrentAthlete(success: { (StravaAthlete) -> Void in
self.performSegue(withIdentifier: "AuthorizeSuccessfulSegue", sender: StravaAthlete.self)
}, failure: { (Error) in
//some failure stuff
})
Die Segue ausgelöst wird und der Benutzer bewegt sich auf den Rest der App auf.
Wenn jedoch der Benutzer anmelden muss, wenn sie an die App zurück, nachdem sie diesen Block läuft zur Ermächtigung:
FRDStravaClient.sharedInstance().exchangeToken(forCode: code,
success: { (response: StravaAccessTokenResponse?) in
self.performSegue(withIdentifier: "AuthorizeSuccessfulSegue", sender: response?.athlete)
}, failure:{ (error) -> Void in
self.showAuthFailedWithError(error: (error?.localizedDescription)!)
print(error!)
})
, die die App mit dem Fehler abstürzt: ‚Receiver() hat keine segue mit identifier 'AuthorizeSuccessfulSegue' '
Beide Erfolgsblöcke verwenden denselben Bezeichner, der in Interface Builder korrekt festgelegt wurde. Selbst referenziert AuthViewController. Warum arbeitet einer und der andere stürzt ab?
Haben Sie versucht, nur den Absender "Selbst" zu machen? Auch wenn das eine asynchrone Anfrage ist, sollten Sie das Segment in einem Dispatch-Block wie 'DispatchQueue.main.async {self.performSegue ...}' – Pierce
ausführen Das sieht Okay für mich aus. Sind Sie sicher, dass diese beiden Blöcke im selben View-Controller sind? –
@Pierce Ich habe verschiedene Varianten des Senders ausprobiert und die 'DispatchQueue.main.async' vor dem Posten eingefügt, aber es hat nichts geändert (und ich habe es auch noch einmal versucht). Beide sind Async-Funktionen. – Colin