据苹果公司称:
\n\n\n\n\n注意\n\xe2\x80\x99 不必按照本文所述使用后台会话执行所有后台网络活动。声明适当后台模式的应用程序可以使用默认 URL 会话和数据任务,就像它们位于前台一样。
\n
我正在尝试将我的 DataTask 与默认会话配置和委托(不是完成处理程序)一起使用,但如果我按主页按钮并再次切换回应用程序,我的数据任务总是失败:
\n\nTask <A25361F9-CAC0-4FA8-8663-777E1C6878A2>.<2> load failed with error Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <A25361F9-CAC0-4FA8-8663-777E1C6878A2>.<2>, _kCFStreamErrorDomainKey=1, NSErrorPeerAddressKey=<CFData 0x108f07b40 [0x1db6c1420]>{length = 16, capacity = 16, bytes = 0x100201bb68118e240000000000000000}, _kCFStreamErrorCodeKey=53, _NSURLErrorRelatedURLSessionTaskErrorKey=(\n"LocalDataTask <A25361F9-CAC0-4FA8-8663-777E1C6878A2>.<2>"\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试过:使用带有或不带有完成处理程序的共享会话,同样的问题。
\n\n我的问题是:“声明适当后台模式的应用程序可以使用默认 URL 会话和数据任务”是什么意思?你如何声明这些背景模式?
\n\n我唯一遇到的是UIApplication.shared.beginBackgroundTask
这就是苹果所说的“适当的背景模式”吗?或者我错过了什么?
\n\n谢谢
\n有没有一种方法可以根据错误枚举的关联值的值来捕获带有某些条件的错误?
例子:
enum Errors : Error {
case error1(str: String?) // optional associated value
case error2
case error3
}
func f() throws {
throw Errors.error1(str: nil)
}
do {
try f()
}
catch Errors.error1(let str) {
if(str != nil) {
print(str!)
}
else {
//throw the same error to be caught in the last catch
}
}
catch {
print("all other errors")
}
Run Code Online (Sandbox Code Playgroud)