2017-04-11 47 views
0

我正在使用其他API登录我只是使用用户的电子邮件和密码发送请求。如果它们在数据库中匹配,那么我返回一些Json并快速解析它。这部分工作正常,我现在想要做的是弄清楚如何提醒用户电子邮件和密码不匹配。到目前为止,我得到这个IOS Swift如何更快地返回标签响应

@IBAction func Login_Action(_ sender: Any) { 
     var check = 0 
     let url:URL = URL(string:ConnectionString+"login")! 
     let Email = email.text! 
     let Password = password.text! 
     let session = URLSession.shared 
     var request = URLRequest(url: url) 
     request.httpMethod = "POST" 
     request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData 
     let parameter = "email=\(Email)&password=\(Password)" 
     request.httpBody = parameter.data(using: String.Encoding.utf8) 

     session.dataTask(with:request, completionHandler: {(data, response, error) in 
      if error != nil { 
       // print(error) 
      } else { 
       do { 
     // if the call is successful then it goes through here otherwise it skips it 
        check = 1 


        let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any] 




         } 
         DispatchQueue.main.async { 

      // send them to member page    
         let next = self.storyboard?.instantiateViewController(withIdentifier: "NextView") 
          self.present(next, animated: true, completion: nil) 

         } 


        } 

       } catch let error as NSError { 
        print(error) 
        if check == 0 { 
       self.error.isHidden = false 
       self.error.text = "Incorrect email and/or password" 
      } 
       } 


      } 
     // If the call is unsuccessful then show message 

      return 
     }).resume() 
     /* 
     print(check) 
     if check == 0 { 
      self.error.isHidden = false 
      self.error.text = "Incorrect email and/or password" 
      print("incorrect") 
     }*/ 


    } 

我使用检查变量作为标志它的默认值是0。这意味着电子邮件/密码组合不起作用,如果电子邮件/密码组合工作,然后我将它设置为1。问题是,如果用户提供了错误的凭证,则需要大约5或7秒才能显示错误的电子邮件和/或密码消息。当我查看通话响应时间时,它会立即返回,但标签显示需要7秒钟。如果我把该.resume外相同的逻辑则出现瞬间不过消息始终是不正确的电子邮件和密码,检查是否为0或1的任何建议将是更好的

+1

嘿罗马,请改善您的代码格式 - 很难阅读它,谢谢!另外:请记住,'guard'是你的朋友:-) –

+1

你需要在关闭窗口*中显示关于不正确的登录详细信息的信息,就像你对下一个场景的演示一样。记得在主队列上发送UI更新 – Paulw11

+0

谢谢你会做Paulo和哦OK Paulw现在会这样做 –

回答

1
  self.error.isHidden = false 
      self.error.text = "Incorrect email and/or password" 

这些线是完成处理程序,但尚未分派到主队列。完成块在后台队列上运行。您不能修改主队列中的任何队列上的UI组件。如果你这样做,有时它会起作用,但是你所看到的症状(长时间延迟)是你可能遇到的许多问题之一。像在do区块中那样将它们移动到DispatchQueue.main.async