2017-02-15 2 views
0

Ich habe ein UILabel im Storyboard erstellt, um die Antwort vom Server anzuzeigen. Es dauert jedoch sehr lange Zeit, um die Zeichenfolge vom Server anzuzeigen. Es hat funktioniert, dauert nur 1 Minute.Warum benötigt diese iOS-App sehr viel Zeit, um die Zeichenfolge für UILabel zu öffnen?

Ich verwende print, um zu überprüfen, ob es eine Verzögerung im Server gibt, aber die Anwendung wird die Antwort im Debugbereich sofort nach dem Öffnen der Anwendung drucken. Ich denke, es sollte App-Problem sein.

Ich überprüfe den Code und sieht gut aus, funktioniert gut. Nur hat ein Verzögerungsproblem. Kann jemand eine Idee haben? (Dies ist eine tvOS App Swift mit 3.0 BTW)

import UIKit 
import Foundation 

class LoginViewController: UIViewController, UITextFieldDelegate, URLSessionDelegate, URLSessionDataDelegate { 

    @IBOutlet weak var RandomString: UILabel! 

    let UUIDValue = UIDevice.current.identifierForVendor!.uuidString 

    func sendRequest(url: String, parameters: String, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionTask { 
     let parameterString = parameters 
     let requestURL = URL(string:"\(url)\(parameterString)")! 

     print("requestURL = \(requestURL)") 

     var request = URLRequest(url: requestURL) 
     request.httpMethod = "GET" 

     let task = URLSession.shared.dataTask(with: request, completionHandler: completionHandler) 
     task.resume() 

     return task 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.sendRequest(url: "http://www.google.com/api", parameters: UUIDValue, completionHandler:{data, response, error in 

      print (self.UUIDValue) 

      guard error == nil && data != nil else { 
       print("error=\(error)") 
       return 
      } 

      let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 

      print("responseString = \(responseString)") 

      //If app receives "true" response from server, go to Home screen. 
      if responseString == "true" { 
       let viewController:UIViewController = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "Tab") as UIViewController 

       self.present(viewController, animated: false, completion: nil) 
      } 
      //If app receives "false" response from server, display the response from server. 
      else { 
       self.RandomString.text = responseString as String? 
      } 
     }) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
} 
+1

Wo setzen Sie den Text des Labels ein? Stellen Sie sicher, dass Sie dies im Hauptthread tun. – Connor

+0

Ich füge einfach den kompletten Code in diesen Thread ein, habe gerade festgestellt, dass er unvollständig ist. – Wei

Antwort

2

Sie richten den Text der Bezeichnung innerhalb des Servers Aufruf, die nicht garantiert sind auf dem Hauptthread sein. Alle UI-Updates müssen im Hauptthread stattfinden. Versuchen Sie Folgendes:

DispatchQueue.main.async { 
    self.RandomString.text = responseString as String? 
} 
+0

Ja, es funktioniert. Sofort zeigt sich. Vielen Dank! – Wei

Verwandte Themen