Can't endBackgroundTask:不存在标识符为 1fd57580 的后台任务,或者它可能已经结束
Posted
技术标签:
【中文标题】Can\'t endBackgroundTask:不存在标识符为 1fd57580 的后台任务,或者它可能已经结束【英文标题】:Can't endBackgroundTask: no background task exists with identifier 1fd57580, or it may have already been endedCan't endBackgroundTask:不存在标识符为 1fd57580 的后台任务,或者它可能已经结束 【发布时间】:2015-10-23 05:24:50 【问题描述】:AppDelegate.m 文件包含
- (void)applicationDidEnterBackground:(UIApplication *)application
UIBackgroundTaskIdentifier taskID = [application beginBackgroundTaskWithExpirationHandler:^
[application endBackgroundTask:taskID];
];
我不知道为什么我会在 gdb 中收到此消息
无法结束BackgroundTask:不存在具有标识符的后台任务 1fd57580,或者它可能已经结束。打破 UIApplicationEndBackgroundTaskError() 进行调试。
【问题讨论】:
【参考方案1】:你的代码全错了。应该是这样的:
UIBackgroundTaskIdentifier taskID = [application beginBackgroundTaskWithExpirationHandler:^
// Code to ensure your background processing stops executing
// so it reaches the call to endBackgroundTask:
];
// Put the code you want executed in the background here
if (taskID != UIBackgroundTaskInvalid)
[[UIApplication sharedApplication] endBackgroundTask:taskID];
【讨论】:
我从网络上看到了一些类似这样的答案:[application endBackgroundTask:taskID]; taskID = UIBackgroundTaskInvalid;
我从分析中发现“存储到'taskID'的值永远不会被读取”,所以taskID = UIBackgroundTaskInvalid;是可选的???
我不太确定你在评论中要问什么,但它让我想起了一个小变化。请参阅我的更新答案。【参考方案2】:
如果您在后台使用位置更新,请在获取用户位置授权时添加以下代码。这是因为 Apple 从 ios 9 开始将默认值 allowsBackgroundLocationUpdates
更改为 NO
。
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9)
locationManager.allowsBackgroundLocationUpdates = YES;
【讨论】:
以上是关于Can't endBackgroundTask:不存在标识符为 1fd57580 的后台任务,或者它可能已经结束的主要内容,如果未能解决你的问题,请参考以下文章
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属性错误”