应该是什么 我有一个用户名字段。输入用户名并单击sendButton时,将使用asynchronousRequest作为JSON文件提取userdata。 单击sendButton后,我想显示一个ActivityIndicator。 在提出请求时,UI仍应响应。
现在如何 我点击sendButton,用户界面冻结了。甚至ActivityIndicator也不会显示。
代码
LoginVC :
func buttonTouchedUpInside(sender: UIButton) {
toggleActivityIndicatorVisibilityOn(true)
LoginManager.sharedInstance.checkUserForCredentials(username: textFieldLogin.text, password: "")
toggleActivityIndicatorVisibilityOn(false)
}
func loginManagerDidFinishAuthenticationForUser(userData: [String:String]?){
// Delegate Method, which works with the fetched userData.
}
LoginManager
func checkUserForCredentials(#username: String ,password: String) -> Void {
let url = NSURL(string: "\(Config.checkCredentialsUrl)username=\(username)")
let request = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: .mainQueue()) { (response, data, error) -> Void in
if error != nil {
//Display error-message
}
var error : NSError?
let json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &error) as? [String:String]
self.delegate?.loginManagerDidFinishAuthenticationForUser(json)
}
}
简而言之:我希望在后台进行请求,显示Activityindicator并且UI保持响应。异步请求成功获取json后,将调用委托方法
答案 0 :(得分:2)
buttonTouchedUpInside
方法中的第二行代码,它读取LoginManager.sharedInstance.checkUserForCredentials(username: textFieldLogin.text, password: "")
正在调用其中的异步函数,这意味着它不会阻塞下一行代码...这就是一个(我猜)会触发你的加载屏幕再次变得不可见。
基本上,您的加载屏幕显示,但会立即再次隐藏。要使用加载屏幕修复至少部分,请将第三行代码放在回调方法buttonTouchedUpInside
中的loginManagerDidFinishAuthenticationForUser
函数中。