Вызов другого ViewController приводит к ошибке - API пользовательского интерфейса вызывается в фоновом потоке - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в IOS и быстро. У меня есть приложение с логином. при нажатии кнопки входа в систему, я отмечаю имя пользователя и пароль, используя метод сообщения. Но в случае успеха я хочу перейти на новый viewcontroller, но он выдаёт мне ошибку API пользовательского интерфейса вызван в фоновом потоке Код нажатия кнопки приведён ниже. Есть ли какая-нибудь асинхронная задача на PostExecute, подобная android в swift, тогда дайте мне знать. Спасибо за помощь.

@IBAction func chkbt(_ sender: Any) {

        var url = URL(string: "http://www.miappserver.co.in:8079/chs_server/rest/menuService/getLoginDetails")!

        var request = URLRequest(url: url)

        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        request.httpMethod = "POST"

        let postString = "{\"one\":\"*userid*\",\"two\":\"*password*\",\"three\":\"strimg\",\"authApiKey\":\"zpfkenaojjawlwjnbsoej-fhfbs\"}"; // which is your parameters

        let idString : String = txtUserId.text!

        let passString : String = txtPassword.text!

        let newString1 = postString.replacingOccurrences(of: "*userid*", with: idString, options: .literal, range: nil)

        let newString2 = newString1.replacingOccurrences(of: "*password*", with: passString, options: .literal, range: nil)

        request.httpBody = newString2.data(using: .utf8)

        // Getting response for POST Method

        DispatchQueue.main.async {

            let task = URLSession.shared.dataTask(with: request) { data, response, error in

                guard let data = data, error == nil else {

                    return // check for fundamental networking error

                }

                // Getting values from JSON Response

                let responseString = String(data: data, encoding: .utf8)

                self.parseJSON(data)

                var users = [Meal]()

                do{

                    users = try JSONDecoder().decode(Array<Meal>.self, from: data)

                    print(users.first?.userId)

                    //print(users.first?.userPersonName)

                    if users.first?.userId != nil {

                        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

                        let newViewController = storyBoard.instantiateViewController(withIdentifier: "Dashboard") as! Dashboard

                        self.present(newViewController, animated: true, completion: nil)

                    }
                }catch{
                    print(error)
                }
                //print("responseString = \(String(describing: responseString))")
                //print(responseString)

                do {

                    let jsonResponse = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? NSDictionary

                }catch _ {

                    print ("OOps not good JSON formatted response")

                }

            }

            task.resume()

        }

    }


1 Ответ

2 голосов
/ 07 ноября 2019

Вам нужно

DispatchQueue.main.async {  
   self.storyBoard!.instantiateViewController(withIdentifier: "Dashboard") as! Dashboard 
   self.present(newViewController, animated: true, completion: nil) 
}

Поскольку URLSession.shared.dataTask(with: request) работает в фоновом потоке, независимо от того, окружаете ли вы его DispatchQueue.main.async {


@IBAction func chkbt(_ sender: Any) {

        var url = URL(string: "http://www.miappserver.co.in:8079/chs_server/rest/menuService/getLoginDetails")!

        var request = URLRequest(url: url)

        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        request.httpMethod = "POST"

        let postString = "{\"one\":\"*userid*\",\"two\":\"*password*\",\"three\":\"strimg\",\"authApiKey\":\"zpfkenaojjawlwjnbsoej-fhfbs\"}"; // which is your parameters

        let idString : String = txtUserId.text!

        let passString : String = txtPassword.text!

        let newString1 = postString.replacingOccurrences(of: "*userid*", with: idString, options: .literal, range: nil)

        let newString2 = newString1.replacingOccurrences(of: "*password*", with: passString, options: .literal, range: nil)

        request.httpBody = newString2.data(using: .utf8)

        // Getting response for POST Method

            let task = URLSession.shared.dataTask(with: request) { data, response, error in

                guard let data = data, error == nil else {

                    return // check for fundamental networking error

                }

                // Getting values from JSON Response

                let responseString = String(data: data, encoding: .utf8)

                self.parseJSON(data)

                var users = [Meal]()

                do{

                    users = try JSONDecoder().decode(Array<Meal>.self, from: data)

                    print(users.first?.userId)

                    //print(users.first?.userPersonName)

                    if users.first?.userId != nil {

                       DispatchQueue.main.async {  

                        self.storyBoard!.instantiateViewController(withIdentifier: "Dashboard") as! Dashboard 

                        self.present(newViewController, animated: true, completion: nil) 
                      }

                    }
                }catch{
                    print(error)
                }
                //print("responseString = \(String(describing: responseString))")
                //print(responseString)

                do {

                    let jsonResponse = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? NSDictionary

                }catch _ {

                    print ("OOps not good JSON formatted response")

                }

            }

            task.resume()

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...