Can't endBackgroundTask:不存在标识符为 * 的后台任务,或者它可能已经结束
Posted
技术标签:
【中文标题】Can\'t endBackgroundTask:不存在标识符为 * 的后台任务,或者它可能已经结束【英文标题】:Can't endBackgroundTask: no background task exists with identifier *, or it may have already been endedCan't endBackgroundTask:不存在标识符为 * 的后台任务,或者它可能已经结束 【发布时间】:2015-06-18 12:58:11 【问题描述】:我的应用通过以下方式监控用户位置更新(不一定是重大的位置变化):
someLocationManager = [[CLLocationManager alloc] init];
[someLocationManager setDelegate:self];
[someLocationManager startUpdatingLocation];
当应用程序(在模拟器中)处于前台时,一切正常,但是当将其挂起到后台(未终止)时,我在日志中收到此错误:
无法结束BackgroundTask:不存在标识符为*的后台任务,或者它可能已经结束
此错误的所有其他答案都与位置服务无关,而只是一般的后台任务问题。
【问题讨论】:
发布您自己的问题/答案很好,但至少让您的“问题”成为一个实际问题。无需提及您将回答自己的问题。 我认为表现得像一个真正的问题没有任何好处。提出一个真正的问题——这就是重点,所以我做到了。 【参考方案1】:因此,为了使后台位置更新正常工作,似乎应该进行以下 3 项设置。 这样做并解决问题:
-
在
info.plist
中设置NSLocationAlwaysUsageDescription
键(以值作为许可的原因)。
请求许可时请务必致电[someLocationManager requestAlwaysAuthorization];
。
在目标设置的Capabilities
部分中的Background Modes
中启用Location Updates
。不确定这个,但听起来不错。
享受吧!
【讨论】:
@AshishKakkad 很好。 您没有提到发布的三个步骤是否确实修复了错误。是吗? "...应该进行以使后台位置更新正常工作",所以是的,它解决了问题。我对其进行了编辑以使其更清晰。【参考方案2】:在从用户获取位置授权时添加以下代码。因为苹果从 ios9 更改了默认的allowBackgroundLocationUpdates NO。
'if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9)
locationManager.allowsBackgroundLocationUpdates = YES;
'
【讨论】:
以上是关于Can't endBackgroundTask:不存在标识符为 * 的后台任务,或者它可能已经结束的主要内容,如果未能解决你的问题,请参考以下文章
endBackgroundTask:导致“由于信号 9 而终止”
beginBackgroundTaskWithExpirationHandler 调用 endBackgroundTask 但未结束进程
iOS后台任务beginBackgroundTask和endBackgroundTask成对出现
Can't install pip with get-pip, zipimport.ZipImportError: can't decompress data; zlib 不可用
iptables v1.4.14: can't initialize iptables table `nat': 表不存在(需要insmod吗?)
can't install specific old version of sklearn to解决pyadio分析库中不兼容的“SVC属性错误”