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