小编akr*_*akr的帖子

当应用程序进入后台时,Swift URLSession DataTask 失败

苹果公司称:

\n\n
\n

注意\n\xe2\x80\x99 不必按照本文所述使用后台会话执行所有后台网络活动。声明适当后台模式的应用程序可以使用默认 URL 会话和数据任务,就像它们位于前台一样。

\n
\n\n

我正在尝试将我的 DataTask 与默认会话配置和委托(不是完成处理程序)一起使用,但如果我按主页按钮并再次切换回应用程序,我的数据任务总是失败:

\n\n
Task <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>"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过:使用带有或不带有完成处理程序的共享会话,同样的问题。

\n\n

我的问题是:“声明适当后台模式的应用程序可以使用默认 URL 会话和数据任务”是什么意思?你如何声明这些背景模式?

\n\n

我唯一遇到的是UIApplication.shared.beginBackgroundTask

\n\n

这就是苹果所说的“适当的背景模式”吗?或者我错过了什么?

\n\n

谢谢

\n

xcode ios swift

4
推荐指数
1
解决办法
3453
查看次数

基于错误的枚举关联值,使用多个 catch 和条件进行快速错误处理

有没有一种方法可以根据错误枚举的关联值的值来捕获带有某些条件的错误?

例子:

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)

error-handling enums swift

2
推荐指数
1
解决办法
428
查看次数

标签 统计

swift ×2

enums ×1

error-handling ×1

ios ×1

xcode ×1