performSegue(withIdentifier)在viewController

时间:2017-02-01 23:11:52

标签: swift swift3

我有一个viewController来处理用户对oAuth API的身份验证。如果user.defaults中存在已存储的令牌,则此块运行

FRDStravaClient.sharedInstance().fetchCurrentAthlete(success: { (StravaAthlete) -> Void in
    self.performSegue(withIdentifier: "AuthorizeSuccessfulSegue", sender: StravaAthlete.self)
}, failure: { (Error) in
    //some failure stuff
})

触发segue并且用户移动到应用程序的其余部分。

但是,如果用户在授权后返回应用程序时需要登录,则此块将运行:

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!)
})

该应用程序因错误而崩溃:' Receiver()没有带标识符的segue' AuthorizeSuccessfulSegue''

两个成功块都使用在Interface Builder中正确设置的相同标识符。 self正在引用AuthViewController。为什么一个工作而另一个工作正在崩溃?

1 个答案:

答案 0 :(得分:0)

问题是第一个函数发生在viewDidLoad内,而第二个函数发生在appDelegate调用的VC函数中,当你从Safari返回并授权应用程序时。我正在实例化一个新的AutViewController而不是获取当前实例。