Почему я не могу получить значение из этого запроса https? - PullRequest
0 голосов
/ 26 января 2019

Кто-нибудь знает, что может быть не так с этим?

Каждый раз, когда я тестирую в симуляторе, запрос просто возвращает значение «Пожалуйста, введите имя».

Это похоже на то, что запрос https вообще не происходит.

import UIKit

class AgeLookUpViewController: UIViewController {
    @IBOutlet weak var celebrityTextField: UITextField!
    @IBOutlet weak var resultLabel: UILabel!

    @IBAction func getAge(_ sender: Any) {
        if let url = URL(string: "https://en.wikipedia.org/wiki/" + celebrityTextField.text!.replacingOccurrences(of: " ", with: "_")) {
            let request = NSMutableURLRequest(url: url)
            let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
                var message = ""

                if error != nil {
                    print(error!)
                } else {
                    if let unwrappedData = data {
                        let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)

                        var stringSeparator = "<span class=\"noprint ForceAgeToShow\">(age&#160;"

                        if let contentArray = dataString?.components(separatedBy: stringSeparator) {
                            if contentArray.count > 1 {
                                stringSeparator = ")</span>"

                                let newContentArray = contentArray[1].components(separatedBy: stringSeparator)

                                if newContentArray.count > 1 {
                                    message = newContentArray[1]
                                    print(message)
                                }
                            }
                        }
                    }
                }

                if message == "" {
                    message = "Please Enter a Name"
                }

                DispatchQueue.main.sync(execute: {
                    self.resultLabel.text = message
                })
            }

            task.resume()
        } else {
            resultLabel.text = "Age is unavailable at this time. Please try again later."
        }
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

Возраст человека должен возвращаться в результате в метке результата.

1 Ответ

0 голосов
/ 26 января 2019

Проверьте мой обновленный код. Я узнал, что запрос идет правильно и печатает ответ. (проверьте оператор печати с dataString). Место, где оно терпит неудачу, находится после ответа. Я получаю сообщение "Возраст не найден 2".

import UIKit

if let url = URL(string: "https://en.wikipedia.org/wiki/Bill_Gates") {
    let request = NSMutableURLRequest(url: url)
    let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
        var message = ""

        if error != nil {
            print(error!)
        } else {
            if let unwrappedData = data {
                let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)

                print(dataString) // checks whether the actual request went through or not.

                var stringSeparator = "<span class=\"noprint ForceAgeToShow\">(age&#160;"

                if let contentArray = dataString?.components(separatedBy: stringSeparator) {
                    if contentArray.count > 1 {
                        stringSeparator = ")</span>"

                        let newContentArray = contentArray[1].components(separatedBy: stringSeparator)

                        if newContentArray.count > 1 {
                            message = newContentArray[1]
                            print(message)
                        } else {
                            print("NO age content found 1")
                        }
                    } else {
                        print("NO age content found 2")
                    }
                } else {
                    print("NO age component found")
                }
            }
        }

        if message == "" {
            message = "Please Enter a Name"
        }

        DispatchQueue.main.sync(execute: {
           print(message)
        })
    }

    task.resume()
}

В вашем случае, если ответ не распечатывается, я предлагаю вам проверить интернет-разрешение, предоставленное в info.plist.

проверьте эту ссылку для получения дополнительной информации.

https://guides.codepath.com/ios/Internet-Permissions

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