我对Swift和iOS开发完全陌生,而且我遇到了一些设计十字路口。
我在我的应用中使用第三方银行登录服务,我使用网址方案打开。 url方案打开银行应用程序,然后输入我的凭据,银行应用程序将再次使用我的唯一URL方案标识符打开我的应用程序,AppDelegate将触发此事件。
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return true
}
银行api暴露了我可以调用的端点来收集尝试登录的状态,如果成功,我将获得一些用户信息。否则,我会收到适当的错误回复。
现在我正在创建一个NSTimer来每秒调用此收集,并检查其状态。哪个工作正常,一切都很好,花花公子。
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "collect:", userInfo: nil, repeats: true)
我觉得这不是一个很好的解决方案,因为当应用切换到银行应用程序进行身份验证时,我的应用程序会进入后台线程,并且NSTimer事件不会被激活。
问题变成了,我最好在我的LoginViewController中监听openURL的AppDelegate事件,当它发生时会开始收集身份验证的状态吗?
这是一个可行的选择,甚至可能吗?或者NSTimer被认为是一个很好的解决方案吗?
提前致谢,我希望我有任何意义。
答案 0 :(得分:1)
在您的情况下,最好直接在openURL事件中调用viewcontroller的方法。不需要轮询,因为如果我理解正确的话,openURL会给你正确答案。 定时器轮询总是在特定事件中丢失,这只是一种不必要的能量消耗。