быстро, как показать оповещение из класса, чтобы посмотреть контроллер - PullRequest
0 голосов
/ 07 января 2019

Мне нужно сообщить о сбое входа в систему с помощью запроса POST, используя UIAlert. функция входа в систему находится в классе, вызываемом моим контроллером, но я не могу представить предупреждение.

Я получил на консоли это сообщение:

Предупреждение: попытка представить на чей вид не в окне иерархии

!

в моем логине ВК я звоню

loginWithCompletition

, и, скажем, пароль неверный, я бы хотел показать это из расширения uiviewcontroller

customErrorMessageAlert (errorMessage: «сообщение об ошибке»)

но я не уверен, что это правильный способ обработки ошибки, и

в моем классе:

class LoginHandler : UIViewController{ 
...}

У меня есть этот метод: loginWithCompletition

func loginWithCompletition(APIUrlString: String, usernameToUse: String, passwordToUse: String, completion: @escaping (String) -> ()) {



    let params = "email=\(usernameToUse)&pass=\(passwordToUse)"

    let myUrl = URL(string: APIUrlString)
    var request = URLRequest(url: myUrl!)

    request.httpMethod = "POST"
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

    request.httpBody = params.data(using: String.Encoding.utf8, allowLossyConversion: false)


    //if all went ok
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response : URLResponse?, error: Error?) in

if let httpResponse = response as? HTTPURLResponse {
            print("error \(httpResponse.statusCode)")

            let responseCode = httpResponse.statusCode

            if responseCode == 401 {
                DispatchQueue.main.async {
                    self.customErrorMessageAlert(errorMessage: "cannot login, wrong mail and password")
                }
            }
        }



        //here we already get the response
        if error != nil {
            print("error! \(String(describing: error))")
            customErrorMessageAlert(errorMessage: "error message")
            return
        }

        //if all is ok, convert data to json object
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

            if let parseJSON = json {
                //                    print("parseJSON is: \(parseJSON)")
                let accessToken = parseJSON["token"] as? String
                //                    print("token is: \(String(describing: accessToken))")

                if let accessToken = accessToken {
                    completion(accessToken)
                } else {
                    print("accessToken is nil")
                    return
                }

                DispatchQueue.main.async {
                    print("all ok!")
                }

            } else {
                print("parseJSON is empty")
            }

        } catch {
            print("error, cannot complete json serialization")
            print("error: \(error.localizedDescription)")
            return
        }

    }



    task.resume()

    //end
}

мое оповещение:

func customErrorMessageAlert(errorMessage: String)  {

        //use this method as default error message and alert

        print("Warning! \(errorMessage) in: \(String(describing: self.title ?? self.description))")

        let alertController = UIAlertController(title: "Error!", message: errorMessage , preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "Close Alert", style: .default, handler: nil)
        alertController.addAction(defaultAction)
        self.present(alertController, animated: true, completion: nil)

    }
...