Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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 当应用程序进入后台时,Swift URLSession DataTask失败_Ios_Swift_Xcode - Fatal编程技术网

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

Ios 当应用程序进入后台时,Swift URLSession DataTask失败,ios,swift,xcode,Ios,Swift,Xcode,根据: 注意 您不必像本文所描述的那样使用后台会话进行所有后台网络活动。声明适当后台模式的应用程序可以使用默认URL会话和数据任务,就像它们在前台一样 我正在尝试将我的DataTask与默认会话配置和委托(不是完成处理程序)一起使用,但如果我按home按钮并再次切换回应用程序,我的data task总是失败: Task <A25361F9-CAC0-4FA8-8663-777E1C6878A2>.<2> load failed with error Error Domai

根据:

注意 您不必像本文所描述的那样使用后台会话进行所有后台网络活动。声明适当后台模式的应用程序可以使用默认URL会话和数据任务,就像它们在前台一样

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

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=(
"LocalDataTask <A25361F9-CAC0-4FA8-8663-777E1C6878A2>.<2>"
任务。加载失败,错误为Domain=NSPOSIXErrorDomain Code=53“软件导致的连接中止”UserInfo={nsurerrorfailingurlsessiontaskerrokerworkey=LocalDataTask.,kCFStreamErrorDomainKey=1,nserrorpearaddresskey={length=16,capacity=16,bytes=0x100201bb68118e240000000000},_kCFStreamErrorCodeKey=53,_NSURLErrorRelatedURLSessionTaskErrorKey=(
“LocalDataTask。”
我尝试的是:使用有或没有完成处理程序的共享会话,同样的问题

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

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

这就是苹果所谓的“适当的背景模式”吗?还是我遗漏了什么

谢谢

是的,这是请求操作系统给你的应用一点时间来完成在用户离开应用程序之前启动的请求的正确方法。请参阅

这就是苹果所谓的“适当的背景模式”吗

他们谈论的是任何可能让你的应用程序在后台运行的技术。请参阅。而“后台任务”就是其中的一种模式,在这种模式中,即使你的应用程序不再在前台,你也有有限的时间来完成一项任务

另一个是。如果启用,在后台获取期间,操作系统可以自行决定在后台启动你的应用程序,让你执行请求,然后在完成后调用完成处理程序。(在这种情况下,你甚至有不到3分钟的时间,大约30秒IIRC。)这就是一个例子“适当的后台模式”,您将使用标准/默认的
URLSessionConfiguration
,而不是后台模式。苹果公司强调这一点,因为它很容易假设任何与后台相关的网络请求都需要后台
URLSessionConfiguration
。但事实并非如此

因此,如果您只是想让应用程序继续运行一段时间来完成任务,即使用户按下home按钮,那么
beginBackgroundTask
与标准
URLSession
结合使用就足够了。或者如果您碰巧使用了其中一种“认可的后台模式”(这听起来不像是您的情况),那么,标准的
URLSession
就足够了


后台
URLSession
确实适用于请求可能需要比分配的时间更长的情况。可能您正在下载许多非常大的资产,如电影,可能需要几分钟以上。只有在这种情况下,您才需要使用后台。这取决于请求的时间长短将需要。

不,这是正确的方法。您可以使用
beginBackgroundTask
最多180秒来完成任务。@Paulw11我在文档中找不到180秒的数字,您确定它正确吗?180秒是所有iOS应用程序可用的后台时间,但该值可能在不同版本之间发生变化苹果一时兴起(但现在已经有180秒了);您可以肯定的是,您提供的
expirationHandler
将在应用程序用完之前不久被调用。如果在调用expiration Handler时您不结束后台任务,iOS将终止您的应用程序。您还可以使用查找剩余的后台时间;但是,请注意,在Xcode b下运行时没有强制执行背景时间限制。