Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Ios NSURErrorDomain代码=-2000“无法从网络加载”_Ios_Swift - Fatal编程技术网

Ios NSURErrorDomain代码=-2000“无法从网络加载”

Ios NSURErrorDomain代码=-2000“无法从网络加载”,ios,swift,Ios,Swift,我的应用程序意外启动时出现了一个我以前从未遇到过的错误,我在网络上找不到任何解决方案。我认为这与我的代码无关,但如果它有帮助的话,这里是: class InterfaceController: WKInterfaceController { @IBOutlet var tableView: WKInterfaceTable! final let url = URL(string: "http://...") private var tasks = [Task]() override fun

我的应用程序意外启动时出现了一个我以前从未遇到过的错误,我在网络上找不到任何解决方案。我认为这与我的代码无关,但如果它有帮助的话,这里是:

class InterfaceController: WKInterfaceController {

@IBOutlet var tableView: WKInterfaceTable!

final let url = URL(string: "http://...")
private var tasks = [Task]()

override func awake(withContext context: Any?) {
    super.awake(withContext: context)

    downloadJson()

}

func downloadJson() {
    guard let downloadURL = url else { return }
    URLSession.shared.dataTask(with: downloadURL) { data, urlResponse, error in

        guard let data = data, error == nil, urlResponse != nil else {
            print("something is wrong")
            return
        }

        do
        {
            let decoder = JSONDecoder()
            let downloadedTasks = try decoder.decode(Tasks.self, from: data)
            self.tasks = downloadedTasks.tasks
            print(self.tasks)

        } catch {
            print("somehting went wrong after downloading")
        }

        }.resume()
}

}
我在控制台中收到的错误消息是:

2018-11-07 21:34:15.538369+0100 BJwatch WatchKit Extension[1884:84116] Task <82BE34C9-CCAB-4076-8012-CC9FF61AE556>.<1> load failed with error Error Domain=NSURLErrorDomain Code=-2000 "can’t load from network" UserInfo={NSLocalizedDescription=can’t load from network, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <82BE34C9-CCAB-4076-8012-CC9FF61AE556>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <82BE34C9-CCAB-4076-8012-CC9FF61AE556>.<1>"
), NSErrorFailingURLStringKey=http://..., _kCFNetworkErrorConditionalRequestKey=<CFMutableURLRequest 0x7c09bc70 [0x34f528c]> {url = http://..., cs = 0x0}, _kCFNetworkErrorCachedResponseKey=<CFCachedURLResponse 0x7afc2840 [0x34f528c]>, NSUnderlyingError=0x7c1eb930 {Error Domain=kCFErrorDomainCFNetwork Code=-2000 "(null)" UserInfo={_kCFNetworkErrorCachedResponseKey=<CFCachedURLResponse 0x7afc2840 [0x34f528c]>, _kCFNetworkErrorConditionalRequestKey=<CFMutableURLRequest 0x7c09bc70 [0x34f528c]> {url = http://..., cs = 0x0}}}, NSErrorFailingURLKey=http://...} [-2000]
 [BJwatch_WatchKit_Extension.Task, BJwatch_WatchKit_Extension.Task,     BJwatch_WatchKit_Extension.Task, BJwatch_WatchKit_Extension.Task]
URL不正确http://... 在真正的应用程序中。这是一个提供JSON数组的URL,它正在工作。

nsurErrorCannotLoadFromNetwork 当任务需要从网络加载时,会发送此错误,但“仅从缓存加载”指令阻止了此操作

默认策略为NSURLRequest.CachePolicy.useProtocolCachePolicy

useProtocolCachePolicy:对于特定URL加载请求,使用协议实现中定义的缓存逻辑(如果有)

重要提示:如果要进行HTTP或HTTPS字节范围请求,请始终使用NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData策略

var request = URLRequest(url: URL(string:"http://...")!)
request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
URLSession.shared.dataTask(with: request) {...
NSURlerorCannotLoadFromNetwork 当任务需要从网络加载时,会发送此错误,但“仅从缓存加载”指令阻止了此操作

默认策略为NSURLRequest.CachePolicy.useProtocolCachePolicy

useProtocolCachePolicy:对于特定URL加载请求,使用协议实现中定义的缓存逻辑(如果有)

重要提示:如果要进行HTTP或HTTPS字节范围请求,请始终使用NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData策略

var request = URLRequest(url: URL(string:"http://...")!)
request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
URLSession.shared.dataTask(with: request) {...

解决此问题的正确答案是更改URLSessionConfiguration。如果任何人仍要使用.useProtocolCachePolicy策略,请使用后台配置

let configuration = URLSessionConfiguration.background(withIdentifier: "xxx.xxx.xxxxx")
let session = URLSession(configuration: configuration)
下面是我从苹果公司得到的支持

Watch应用程序往往会很快挂起,因此我们建议开发人员使用后台url会话,以确保在发生诸如回退或挂起之类的事件时仍能执行api调用


解决此问题的正确答案是更改URLSessionConfiguration。如果任何人仍要使用.useProtocolCachePolicy策略,请使用后台配置

let configuration = URLSessionConfiguration.background(withIdentifier: "xxx.xxx.xxxxx")
let session = URLSession(configuration: configuration)
下面是我从苹果公司得到的支持

Watch应用程序往往会很快挂起,因此我们建议开发人员使用后台url会话,以确保在发生诸如回退或挂起之类的事件时仍能执行api调用


欢迎加入,谢谢你的回答。你能解释一下你的代码是如何解决这个问题的吗?谢谢,只需编辑你的原始答案就可以了!再次感谢你的贡献。卡特尔:您是否能够验证政策变更是否解决了您的问题。我有完全相同的问题。这解决了问题。非常感谢。欢迎加入,谢谢你的回答。你能解释一下你的代码是如何解决这个问题的吗?谢谢,只需编辑你的原始答案就可以了!再次感谢你的贡献。卡特尔:您是否能够验证政策变更是否解决了您的问题。我有完全相同的问题。这解决了问题。非常感谢。