使用 UIActivityIndicatorView 进行登录过程,但因为我使用的是线程,所以我无法停止它
Using a UIActivityIndicatorView for Login process but as I'm using a thread I can't stop it
我正在使用 UIActivityIndicatorView
向用户显示在我验证登录详细信息时发生了一些事情。下面的代码显示了我在做什么:
func confirmLogin(sender: UIButton) {
ViewController.gVariables.gUser = userNameText.text
ViewController.gVariables.gPwd = passwordText.text
ViewController.gVariables.gLoggedIn = ""
indicatorView.startAnimating()
passwordText.text = ""
GetRemoteData.getValidationFromServer( { (svrData) -> Void in
dispatch_async(dispatch_get_main_queue()) {
self.indicatorView.stopAnimating()
self.indicatorView.hidden = true
MenuViewController.processLogin()
}
})
}
用户名和密码被传递到我的 GetRemoteData
class 中的 getValidationFromServer
方法,它处理许多其他 Web 服务 activity。我将我的指示器设置为在调用该方法之前开始动画,但以下代码应该停止指示器,但它没有区别,因为它在另一个线程上
如何关闭指示灯?
getValidationFromServer
的完成块正在将 activity 指标视图的停止分派回主队列。这是正确的做法。当分派回主队列的代码运行时,您的指示器视图应该停止。
如果指标视图没有停止,只有几个合乎逻辑的原因可能会导致这种情况发生:
您可能在其他地方有一些其他代码再次启动 indicatorView
(例如在 processLogin
中)。
您可能有一些东西阻塞了主线程,阻止了从 运行 分派到主线程的这段代码。
也许您的完成块根本没有被调用。
我建议在您调用 stopAnimating
的地方放置一个断点或日志消息,看看您是否完全到达那个点。从那里,您可以诊断问题的根源。但是问题中提供的代码并不是问题的根源。
我正在使用 UIActivityIndicatorView
向用户显示在我验证登录详细信息时发生了一些事情。下面的代码显示了我在做什么:
func confirmLogin(sender: UIButton) {
ViewController.gVariables.gUser = userNameText.text
ViewController.gVariables.gPwd = passwordText.text
ViewController.gVariables.gLoggedIn = ""
indicatorView.startAnimating()
passwordText.text = ""
GetRemoteData.getValidationFromServer( { (svrData) -> Void in
dispatch_async(dispatch_get_main_queue()) {
self.indicatorView.stopAnimating()
self.indicatorView.hidden = true
MenuViewController.processLogin()
}
})
}
用户名和密码被传递到我的 GetRemoteData
class 中的 getValidationFromServer
方法,它处理许多其他 Web 服务 activity。我将我的指示器设置为在调用该方法之前开始动画,但以下代码应该停止指示器,但它没有区别,因为它在另一个线程上
如何关闭指示灯?
getValidationFromServer
的完成块正在将 activity 指标视图的停止分派回主队列。这是正确的做法。当分派回主队列的代码运行时,您的指示器视图应该停止。
如果指标视图没有停止,只有几个合乎逻辑的原因可能会导致这种情况发生:
您可能在其他地方有一些其他代码再次启动
indicatorView
(例如在processLogin
中)。您可能有一些东西阻塞了主线程,阻止了从 运行 分派到主线程的这段代码。
也许您的完成块根本没有被调用。
我建议在您调用 stopAnimating
的地方放置一个断点或日志消息,看看您是否完全到达那个点。从那里,您可以诊断问题的根源。但是问题中提供的代码并不是问题的根源。