Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中,在继续编写代码之前,如何安全地确保从Google检索数据(日期和时间)?_Swift_Datetime_Session_Url_Completionhandler - Fatal编程技术网

在Swift中,在继续编写代码之前,如何安全地确保从Google检索数据(日期和时间)?

在Swift中,在继续编写代码之前,如何安全地确保从Google检索数据(日期和时间)?,swift,datetime,session,url,completionhandler,Swift,Datetime,Session,Url,Completionhandler,我发现另一个问题写得很好,但它描述了如何在urlSession中使用完成处理程序来分段。。。但我很难将它应用到我的案例场景中 我想做什么: 在谷歌服务器上以“UTC”格式查找当前日期和时间 确保在继续之前已检索到数据 将检索到的数据(日期和时间)保存在字符串变量中 到目前为止,我在代码工作中所写的内容。。。有时。。。但它并不健壮。我经常会遇到崩溃,从我有限的知识来看,我能够研究这样一个事实,即它可能与在实际检索数据之前继续执行的任务有关(有时它说我正在查找的是“零”) 下面是我调用函数进行提取的

我发现另一个问题写得很好,但它描述了如何在urlSession中使用完成处理程序来分段。。。但我很难将它应用到我的案例场景中

我想做什么:

  • 在谷歌服务器上以“UTC”格式查找当前日期和时间
  • 确保在继续之前已检索到数据
  • 将检索到的数据(日期和时间)保存在字符串变量中
  • 到目前为止,我在代码工作中所写的内容。。。有时。。。但它并不健壮。我经常会遇到崩溃,从我有限的知识来看,我能够研究这样一个事实,即它可能与在实际检索数据之前继续执行的任务有关(有时它说我正在查找的是“零”)

    下面是我调用函数进行提取的部分:

        func handleDateAndTimeFetch (fetch: String, calculate: Bool) {
    
        serverTimeReturn { (getResDate) -> Void in //Handles the value received from Google and formats it
    
            let dFormatter = DateFormatter()
            dFormatter.dateStyle = .short
            dFormatter.timeStyle = .medium
            dFormatter.timeZone = TimeZone(abbreviation: "UTC")
    
            let dateAndTimeNow = dFormatter.string(from: getResDate!)
        }
    }
    
    …下面是函数:

        //Call Google's server for the current date & time in UTC (Coordinated Universal Time)
    
    func serverTimeReturn(completionHandler:@escaping (_ getResDate: Date?) -> Void){
    
        let url = URL(string: "https://www.google.com")
        let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in
            let httpsResponse = response as? HTTPURLResponse
            if let contentType = httpsResponse!.allHeaderFields["Date"] as? String {
    
                let dFormatter = DateFormatter() //A formatter object
                dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
    
                let serverTime = dFormatter.date(from: contentType)
                completionHandler(serverTime)
            }
        }
            print("Retrieved date value")
            task.resume()
    }
    
    …最后,这里是我在奇数时间得到的错误。如果你能,你能帮我理解这些错误到底在说什么吗

    2018-04-25 21:05:55.071137-0400 JeegO[8768:3548654] TIC TCP Conn Failed [3:0x1c0176200]: 1:50 Err(50)
    
    2018-04-25 21:05:55.071486-0400 JeegO[8768:3548654] Task <5C958839-0A62-4E06-A811-8ED9D8A4709C>.<1> HTTP load failed (error code: -1009 [1:50])
    
    2018-04-25 21:05:55.078817-0400 JeegO[8768:3548645] Task <5C958839-0A62-4E06-A811-8ED9D8A4709C>.<1> finished with error - code: -1009
    
    2018-04-25 21:05:55.071137-0400吉戈[8768:3548654]TIC TCP连接失败[3:0x1c0176200]:1:50错误(50)
    2018-04-25 21:05:55.071486-0400吉戈[8768:3548654]任务。HTTP加载失败(错误代码:-1009[1:50])
    2018-04-25 21:05:55.078817-0400吉戈[8768:3548645]任务。已完成,但出现错误-代码:-1009
    
    (lldb)

    在我继续使用我的应用程序之前,我想确保我能够检索到这些简单的数据(日期和时间),因此我非常感谢您帮助我解决这个小问题,以便我可以放心地继续前进:)


    非常感谢

    您的代码没有问题。您遇到错误,这意味着您的internet连接未建立

    NSURLERRORNOTTENTEDTOINTERNET

    请求网络资源时返回,但internet连接未建立且无法自动建立,这可能是由于缺乏连接,也可能是由于用户选择不自动建立网络连接


    哪一行出现了
    nil
    错误?@Malik当我出现“nil”错误时,它来自于“if let contentType=httpsResponse!”行!。所有HeaderFields[“日期”]作为?字符串,其中表示标题为零??可悲的是,我甚至不完全确定日期是如何从谷歌检索到的,所以我无法提供更多的见解。。。这段代码大部分是从另一个堆栈溢出答案复制的。我有时也会收到错误代码1001和1002(我想当我收到零错误时……这在我发帖时并没有发生)。嗯,这似乎很奇怪(因为我的互联网非常强大,我从来没有在我的任何设备上丢失过它)。。。如果我在通过Xcode运行应用程序的同时退出该应用程序,则我的任何其他依赖网络的应用程序仍然可以工作…:/我想这不会发生在这次运行中,但我也会定期收到错误代码1001和1002。-1001代表
    nUrlErrorTimeDout
    -1002代表
    nUrlErrorUnSupportedUrl
    您可以检查其他错误代码,感谢您的澄清:)您知道为什么根据我的代码,“不受支持”会在随机时间出现吗?为什么请求会超时?当错误发生(并且我的应用程序崩溃)时,它是在刚刚调用代码之后发生的,并且根本没有明显的延迟。每当我关闭(输入后台)或打开(输入前台)我的应用程序时,我都会运行该功能(检索日期和时间)。谢谢你帮我理解!你能检查一下httpsResponse吗?.statusCode。在我的机器里,它工作得很好,我得到了200。太棒了,谢谢!我想不出它崩溃的任何可能原因(因为在应用程序的不同状态下发生的事情有点抽象)。。。但这是有道理的,并明确指出了一个可能的问题。我看看这是否管用。:)