【发布时间】:2017-03-18 20:02:41
【问题描述】:
我正在使用 Swift 3,我想在登录成功时从我的类中的一个函数更改我的视图。
我有一个 LoginViewController 包含这个功能:
static let sharedInstance = LoginViewController()
//...
func showNextView() {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
guard let eventVC = storyboard.instantiateViewController(
withIdentifier: "EventsTVC") as? EventsTableViewController else {
assert(false, "Misnamed view controller")
return
}
self.present(eventVC, animated: false, completion: nil)
}
在我的班级 APIManager 中,我使用 Alamofire 在我的异步方法中调用此函数:
func processAuth(_ data: [String: String]) {
print("-- auth process started")
//... defining vars
Alamofire.request(tokenPath, method: .post, parameters: tokenParams, encoding: JSONEncoding.default, headers: tokenHeader)
.responseJSON { response in
guard response.result.error == nil else {
print(response.result.error!)
return
}
guard let value = response.result.value else {
print("No string received in response when swapping data for token")
return
}
guard let result = value as? [String: Any] else {
print("No data received or data not JSON")
return
}
// -- HERE IS MY CALL
LoginViewController.sharedInstance.showNextView()
print("-- auth process ended")
}
}
我的控制台返回此错误消息:
-- 身份验证过程已启动
2017-03-18 20:38:14.078043 警告:尝试在 谁的视野不在窗内 等级制度!
-- 认证过程结束
我认为当我的异步方法结束时改变我的视图不是最佳做法。
我不知道我要做什么。目前,流程如下:
- 用户打开应用程序并显示
LoginViewController,如果没有保存令牌(Facebook 登录) - 在必须登录的情况下,会显示“使用 Facebook 登录”按钮
- 登录成功后,我在
APIManager class的processAuth()函数中发送Facebook 数据 - 当我的 API 返回令牌时,我将其保存并将视图更改为 EventsTVC
我用粗体表示问题所在。我想知道这是否是我的最佳做法。如果是这样,如何避免我的错误信息?
我希望我能理解自己。感谢您的帮助!
【问题讨论】: