私は、oAuth APIに対するユーザーの認証を処理するviewControllerを持っています。 user.defaultsに格納されたトークンがある場合、このブロックはperformSegue(withIdentifier)はviewControllerの1つのインスタンスで失敗します
FRDStravaClient.sharedInstance().fetchCurrentAthlete(success: { (StravaAthlete) -> Void in
self.performSegue(withIdentifier: "AuthorizeSuccessfulSegue", sender: StravaAthlete.self)
}, failure: { (Error) in
//some failure stuff
})
セグエがトリガされ実行され、ユーザがアプリケーションの残りの部分に進みます。エラーでアプリがクラッシュ
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!)
})
::「レシーバーは()はセグエとを持っていないユーザーがログインする必要がある場合
しかし、彼らはそれを、このブロックの実行を許可した後、アプリケーションに返されたときに、 identifier 'AuthorizeSuccessfulSegue' '
両方の成功ブロックは、Interface Builderで正しく設定された同じ識別子を使用します。自己がAuthViewControllerを参照しています。なぜ、1つは機能していて、もう1つはクラッシュしていますか?
送信者「自己」にしてみましたか?また、非同期リクエストの場合は、 'DispatchQueue.main.async {self.performSegue ...} 'のようなディスパッチブロックでセグを実行している必要があります。 – Pierce
これは私には似ています。これらの2つのブロックが同じビューコントローラにあることを確認しますか? –
@Pierce私は送信者のいくつかのバリエーションを試みただけでなく、投稿する前に 'DispatchQueue.main.async'を入れていましたが、何も変更しませんでした(そしてもう一度試しました)。 – Colin