2017-02-01 12 views
1

私は、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つはクラッシュしていますか?

+2

送信者「自己」にしてみましたか?また、非同期リクエストの場合は、 'DispatchQueue.main.async {self.performSegue ...} 'のようなディスパッチブロックでセグを実行している必要があります。 – Pierce

+0

これは私には似ています。これらの2つのブロックが同じビューコントローラにあることを確認しますか? –

+0

@Pierce私は送信者のいくつかのバリエーションを試みただけでなく、投稿する前に 'DispatchQueue.main.async'を入れていましたが、何も変更しませんでした(そしてもう一度試しました)。 – Colin

答えて

0

問題は最初の機能がviewDidLoadの中で起こっていたのに対し、Safariから戻ってそのアプリケーションを認証するときに、appDelegateが呼び出すVCの機能で2番目の機能が起こるという問題でした。現在のインスタンスを取得するのではなく、新しいAutViewControllerをインスタンス化していました。

関連する問題