【问题标题】:Timeout if server does not answer如果服务器没有响应则超时
【发布时间】:2017-05-03 09:37:26
【问题描述】:

我的 VC 中有这样的代码:

    if Reachability.isConnectedToNetwork() == true {
        print("Internet connection OK")

         JSONParseFunc()

    } else {
        print("Internet connection FAILED")
        let alert = UIAlertView(title: "you're not conneted to internet ", message: "make sure you're connected to server ", delegate: nil, cancelButtonTitle: "OK")
        alert.show()
    }

我在其中检查互联网的可达性,但我想检查服务器是否正在发送数据,我需要为此设置超时,我如何在这段代码中实现超时这是我的 JSON 函数:

func JSONParseFunc(){



        let requestURL: NSURL = NSURL(string: "XXXXXXX")!
        let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
        let session = URLSession.shared
        let task = session.dataTask(with: urlRequest as URLRequest) {
            (data, response, error) -> Void in


            let readableJSON = JSON(data: data! , options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)

            self.nrows = readableJSON.count

            for i in 0...self.nrows{

                if let Name = readableJSON[i]["Name"].string as String! {
                    var ID = readableJSON[i]["Id"].intValue
                    var iDString = String (ID)

                    var desc = readableJSON[i]["Description"].string as String!


                    self.iDArray.append(iDString)

                    self.description1.append(desc!)
                    self.namesArray.append(Name)


                }




            }

            self.tableView.reloadData()
        }
        task.resume()

    self.tableView.reloadData()


    }

【问题讨论】:

  • (NS)URLRequest 有一个 timeoutInterval 属性 ...
  • 我应该把它放在我的代码哪里?
  • 怎么看? – 你也可以考虑在 Swift 3 中使用 URLRequest 而不是 NSMutableURLRequest
  • 顺便说一句,看看Connect Without Preflight:建议尝试建立连接之前检查互联网连接。
  • 我可以先用我的主机名检查可访问性吗? @MartinR

标签: ios swift timeout reachability


【解决方案1】:

尝试这样设置

 var session = URLSession()
 override init() {
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 30.0
        configuration.timeoutIntervalForResource = 60.0
        session = URLSession(configuration: configuration)

    }

【讨论】:

  • 你收到服务器的响应了吗?
  • 好吧,只要检查 readableJSON 是否为空,如果 readableJSON 是字典,然后检查 readableJSON.isEmpty{} 如果不为空则继续,如果为空则返回
  • 好的,所以在进行序列化之前检查你的 if data != nil
  • WOaaaah 感谢一百万它的工作,所以这样我就不需要检查服务器响应是否正确?
  • @UncleJunior 但假设如果服务器花时间发送响应,那么我们可以使用 Timeoutinterval
猜你喜欢
  • 2011-12-31
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多