UIKitBackgroundCompletionTask - iPhone 应用程序崩溃

2023-11-29

我遇到了一个问题,还没有任何解决方案。在用户按下“主页”按钮后,我使用后台任务处理程序来启动一些数据获取。代码是这样的:

-(void)startRequest {
    UIApplication *app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
        dispatch_async(dispatch_get_main_queue(), ^{
                [app endBackgroundTask:bgTask];
                bgTask = UIBackgroundTaskInvalid;
            });
    }];
    //..
    //Fetch data with NSURLRequest / delegate method
    //..
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    if ([delegate respondsToSelector:delegateErrorMethod])
        [delegate performSelector:delegateErrorMethod];

    UIApplication *app = [UIApplication sharedApplication];
    if (bgTask != UIBackgroundTaskInvalid) {
       dispatch_async(dispatch_get_main_queue(), ^{
            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        });
    }
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    if([delegate respondsToSelector:delegateMethod])
        [delegate performSelector:delegateMethod withObject:self];  

    UIApplication *app = [UIApplication sharedApplication];
    if (bgTask != UIBackgroundTaskInvalid) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        });
    }
}

它工作得很好,但有时(没有任何问题或原因,所以它真的是不可预测的)应用程序崩溃,并显示以下崩溃日志:

Application Specific Information:
MyBackgroundTest[7745] has active assertions beyond permitted time: 
{(
    <SBProcessAssertion: 0x90e65e0> identifier: UIKitBackgroundCompletionTask process: MyBackgroundTest[7745] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:7745 preventSuspend  preventIdleSleep 
)}

Elapsed total CPU time (seconds): 0.010 (user 0.010, system 0.000), 100% CPU 
Elapsed application CPU time (seconds): 0.000, 0% CPU

Thread 0:
0   libSystem.B.dylib               0x33b5d268 mach_msg_trap + 20
1   libSystem.B.dylib               0x33b5f354 mach_msg + 44
2   CoreFoundation                  0x33a48648 __CFRunLoopServiceMachPort + 88
3   CoreFoundation                  0x33a47ed2 __CFRunLoopRun + 350
4   CoreFoundation                  0x33a47c80 CFRunLoopRunSpecific + 224
5   CoreFoundation                  0x33a47b88 CFRunLoopRunInMode + 52
6   GraphicsServices                0x33b0e4a4 GSEventRunModal + 108
7   GraphicsServices                0x33b0e550 GSEventRun + 56
8   UIKit                           0x32099322 -[UIApplication _run] + 406
9   UIKit                           0x32096e8c UIApplicationMain + 664
10  MyBackgroundTest                0x00002d64 0x1000 + 7524
11  MyBackgroundTest                0x00002d18 0x1000 + 7448

Thread 1:
0   libSystem.B.dylib               0x33b89974 kevent + 24
1   libSystem.B.dylib               0x33c33704 _dispatch_mgr_invoke + 88
2   libSystem.B.dylib               0x33c33174 _dispatch_queue_invoke + 96
3   libSystem.B.dylib               0x33c32b98 _dispatch_worker_thread2 + 120
4   libSystem.B.dylib               0x33bd724a _pthread_wqthread + 258
5   libSystem.B.dylib               0x33bcf970 start_wqthread + 0

Thread 2:
0   libSystem.B.dylib               0x33b5d268 mach_msg_trap + 20
1   libSystem.B.dylib               0x33b5f354 mach_msg + 44
2   CoreFoundation                  0x33a48648 __CFRunLoopServiceMachPort + 88
3   CoreFoundation                  0x33a47ed2 __CFRunLoopRun + 350
4   CoreFoundation                  0x33a47c80 CFRunLoopRunSpecific + 224
5   CoreFoundation                  0x33a47b88 CFRunLoopRunInMode + 52
6   WebCore                         0x304df124 RunWebThread(void*) + 332
7   libSystem.B.dylib               0x33bd6886 _pthread_start + 242
8   libSystem.B.dylib               0x33bcba88 thread_start + 0

Thread 3:
0   libSystem.B.dylib               0x33b5d268 mach_msg_trap + 20
1   libSystem.B.dylib               0x33b5f354 mach_msg + 44
2   CoreFoundation                  0x33a48648 __CFRunLoopServiceMachPort + 88
3   CoreFoundation                  0x33a47ed2 __CFRunLoopRun + 350
4   CoreFoundation                  0x33a47c80 CFRunLoopRunSpecific + 224
5   CoreFoundation                  0x33a47b88 CFRunLoopRunInMode + 52
6   Foundation                      0x336465f6 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 206
7   Foundation                      0x33624192 -[NSThread main] + 38
8   Foundation                      0x3361d242 __NSThread__main__ + 966
9   libSystem.B.dylib               0x33bd6886 _pthread_start + 242
10  libSystem.B.dylib               0x33bcba88 thread_start + 0

Thread 4:
0   libSystem.B.dylib               0x33b8168c select$DARWIN_EXTSN + 20
1   CoreFoundation                  0x33a7f662 __CFSocketManager + 582
2   libSystem.B.dylib               0x33bd6886 _pthread_start + 242
3   libSystem.B.dylib               0x33bcba88 thread_start + 0

Thread 5:
0   libSystem.B.dylib               0x33bd79e0 __workq_kernreturn + 8
1   libSystem.B.dylib               0x33bd7364 _pthread_wqthread + 540
2   libSystem.B.dylib               0x33bcf970 start_wqthread + 0

Thread 6:
0   libSystem.B.dylib               0x33bd79e0 __workq_kernreturn + 8
1   libSystem.B.dylib               0x33bd7364 _pthread_wqthread + 540
2   libSystem.B.dylib               0x33bcf970 start_wqthread + 0

Unknown thread crashed with unknown flavor: 5, state_count: 1

UPDATE:似乎与此问题相关的更密切的线程已打开here。 该错误与重定向 http 连接、异步和同步 NRURL 操作有关。也许,既然 NSURLConnection 继承自基础框架,那么这个 bug 也存在于 iPhone 上吗?

打开雷达:1062401


我的调查表明,无论真正的原因是什么,您都会遇到以下异常:

TMS[13544] has active assertions beyond permitted time: 
{(
    <SBProcessAssertion: 0x8cb6040> identifier: UIKitBackgroundCompletionTask process: TMS[13544] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:13544 preventSuspend  preventIdleSleep 
)}

如果代码没有执行`endBackgroundTask:'方法。

这意味着创建的每个后台任务beginBackgroundTaskWithExpirationHandler:' call MUST be ended with结束后台任务:'。 仔细检查“endBackgroundTask:”是否使用正确的任务 ID 调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIKitBackgroundCompletionTask - iPhone 应用程序崩溃 的相关文章

  • UIImagePickerView 控制器 - 图像路径 - iphone

    UIImagePickerView控制器返回NSData的图像 我的要求是将图像的路径存储为 varchar 数据类型 从中选择图像后UIImagePickerView 如何获取iPhone照片库中所选图片的完整路径 我的应用程序不必担心在
  • 个人帐户开发者之间的 Apple 开发/分发证书

    我一直在到处寻找有关处理证书的正确答案 想象一下以下帐户 Joe拥有个人 Apple 帐户 但他根本不会编码 他只是发布了该应用程序并将其称为自己的 Bob还有一个个人 Apple 帐户 Bob 是一位编码专家 Joe 付费让他开发他的第一
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 填充 CoreData 创建的 sqlite 数据库

    我有一个由 CoreData 模型自动创建的 sqlite DB 但我的应用程序不会让用户能够将数据写入其中 而是我想用程序所需的所有数据预先填充它 我的问题是 CoreData 创建的 sqlite DB 具有未知的表和字段 这些表和字段
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • 为沙盒 Cocoa 应用程序创建临时文件

    我的应用程序是沙箱化的 根据最新的应用程序商店指南 我想创建一些临时文件 我可以这样做吗 如果 是 我可以在哪里这样做 有没有预先指定的路径 还有访问该路径的命令 您应该使用NSTemporaryDirectory 函数 它将查找并返回适合
  • Cocos2d - 将 GLImageProcessing 效果应用于 CCSprite

    苹果的oplenglGL图像处理 http developer apple com library ios samplecode GLImageProcessing Introduction Intro html加载图像并应用图像调整 亮度
  • 仅将 UIImage 移动到另一个 UIImage 内部

    I have an UIImage which is shown in an UIImageView I also have another image in an UIImageView which lays above the firs
  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • 使用 NSDateFormatter 从字符串中获取日期,无论 12 小时到 24 小时设置如何

    今天我的问题是关于日期格式和字符串 我的应用程序从互联网下载一些表示日期的字符串 日期格式始终是这样的 2010 05 24 at 20 45 我需要将此字符串转换为 NSDate 对象才能执行一些日期操作 我尝试了这段代码 NSStrin
  • 使用 iPhone 摄像头检测心率 [重复]

    这个问题在这里已经有答案了 可能的重复 使用摄像头检测心率 https stackoverflow com questions 9274027 detecting heart rate using the camera 我正在研究 iOS
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • 私人 iPhone 应用程序?

    我有兴趣编写连接到内部网或外部网的应用程序 换句话说 我想为我的客户制作私人应用程序 但我不希望每个人都能够访问它并能够下载它 您知道是否有一种方法可以将企业应用程序仅分发给特定的人 Android 也做同样的事情吗 The iPhone
  • 如何适配iPhone 4屏幕分辨率?

    根据Apple http www apple com iphone specs html iPhone 4 拥有新的 更好的屏幕分辨率 3 5 英寸 对角线 宽屏多点触控显示屏960 x 640 像素分辨率 326 ppi 这个小细节对我们
  • 如何减少典型 iPhone 应用程序的启动时间?

    需要明确的是 这是一个普通的 iPhone 应用程序 而不是游戏 我在网上读过几次 一些开发人员提到他们正在努力改进 减少应用程序的启动时间 但从来没有提供任何关于如何做到这一点的良好背景信息 那么问题很简单 如何减少 iPhone 应用程
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何在 iOS 中注册自定义文件类型

    我目前正在创建一个应用程序 我想让用户在其中备份他们的文件 plist m4a 我压缩文件并将扩展名更改为自定义扩展名 专门针对我的应用程序 例如 MyBackup 然后 用户可以通过电子邮件或 iTunes 文件共享进行导出 我已经阅读过

随机推荐

  • 绑定到 Django Admin 的模型历史记录

    设置 我正在开发一个 Django 应用程序 它允许用户在数据库中创建一个对象 然后返回并根据需要进行编辑 Django 的管理站点保存通过管理站点对对象所做的更改的历史记录 问题 如何将我的应用程序挂接到管理站点的更改历史记录中 以便我可
  • lua 中的来回 UTC 日期

    我在将 lua 日期转换为时间戳然后从中获取原始日期时遇到问题 它确实适用于非 UTC 日期 但不适用于 UTC 目前我的示例代码是 local dt1 os date t print dt1 hour local dt2 os date
  • MySQL 错误 1349 我缺少什么?

    我正在获取 MySQL1349错误 但看起来错误似乎不正确 ERROR 1349 View s SELECT contains a subquery in the FROM clause 创建视图时可以没有任何子查询吗 这是我的 SQL C
  • Spark:当键是不可散列的numpy数组时如何“reduceByKey”?

    我有一个 键 值 元素的 RDD 键是 NumPy 数组 NumPy 数组不可散列 当我尝试执行以下操作时 这会导致问题reduceByKey手术 有没有办法为 Spark 上下文提供我的手动哈希函数 或者有没有其他方法可以解决这个问题 除
  • 如何将此 JSON 反序列化为对象?

    我正在尝试使用 JSON Net 将 JSON 对象反序列化为 C 对象 我想要创建的对象是MonthlyPerformance其中包含一个列表Type 其中包含一个列表Categories 其中又包含一个列表Funds 它们定义为 pub
  • HttpClient 在指定超时之前超时

    我正在使用 WP8 中的 HttpClient 并执行 Post 请求 我知道呼叫可能需要很长时间 因为我实际上是在模拟慢速网络场景 因此我设置了HttpClient Timeout相应地为5分钟 然而 我在 60 秒左右超时 我相信超时不
  • 将依赖项注入 Ember 模型

    我正在尝试将依赖项注入我的 Ember 模型中 https github com emberjs ember js issues 3670 表明此功能已禁用 通过链接访问https github com stefanpenner ember
  • 为什么我们可以从线程池线程修改表单标题? [复制]

    这个问题在这里已经有答案了 下面的等待任务尚未完成await点并且它不捕获 UI 上下文 这意味着后面的 UI 修改代码将在另一个线程 本例中为线程池线程 中调用 private async void Button1 Click objec
  • 如何从表中获取数据?

    如何从 Javascript 中的表 displayTable 中名为 Limit 的列中提取数据 字符串 var table document getElementById displayTable var rowCount table
  • Rails ActiveRecord 如何在没有多个查询的情况下链接“where”子句?

    我是一名 PHP 开发人员 正在学习 Ruby on Rails 的强大功能 我很喜欢 ActiveRecord 并且注意到一些非常有趣的事情 这就是 ActiveRecord 方法如何检测方法链的末尾以执行查询 person Person
  • 在mvc中加载gif

    我的控制器中有一个像这样的方法 public string UpdateResource Thread Sleep 2000 return string Format Current time is 0 DateTime Now ToSho
  • 如何从Android中的日期选择器获取日期?

    我正在使用DatePicker对于我的申请 我想获取我选择的日期 在DatePicker 但它不返回选定的日期 它始终返回当前日期 我怎样才能得到选定的日期DatePicker 任何帮助将不胜感激 day pickDate getDayOf
  • 如何使用 Commons FileUpload 设置存储文件上传的文件夹

    如何设置 TOMCAT 服务器上存储文件上传的位置 我在用commons fileupload就目前情况而言 我能够存储多个 tmp文件到catalina base temp但是 我的目标是将上传的文件夹以其原始形式存储到d dev upl
  • 内联 SVG 上的 Jquery 切换类

    我有一个带有内联 SVG 站点地面植物的考古图 的布局 侧边栏中有一些解释性文本 我想通过切换来更改我在 SVG 中创建的组的一些属性不同组的班级 我正在尝试使用 JQuerytoggleClass 但它不起作用 我想将类上的更改绑定到一些
  • Symfony2 如何渲染复选框?

    我有一个表单构建器表单 其中包含多个国家 地区选择列表 当我将它们呈现在我的表单上时 如下所示 form widget edit form countries 它们看起来像这样
  • Python 正则表达式列表的总和没有输出

    问题是读取文件 使用 re findall 查找整数 查找 0 9 的正则表达式 然后将提取的字符串转换为整数并对整数求和 我的代码 其中sample txt是我的文本文件 import re hand open sample txt fo
  • 无需构造函数注入即可获取服务实例

    我有一个 InjectableBootstrap 中定义的服务 我想在不使用构造函数注入的情况下获取服务的实例 我尝试使用ReflectiveInjector resolveAndCreate但这似乎创建了一个新实例 我尝试这样做的原因是我
  • 如何使用 webmatrix 将图像添加到 iTextSharp 中的表格单元格

    我制作了一张包含单元格的表格 并希望在其中一个单元格中包含图像 下面是我的代码 doc Open PdfPTable table new PdfPTable 2 table TotalWidth 570f table LockedWidth
  • 来自方位角、仰角、距离和观察者经纬度、纬度的 ECEF

    我正在尝试编写一个基本的 python 脚本 它将从给定位置跟踪用 tle 定义的给定卫星 我不是一个阿斯托 轨道人 但我正在努力变得更聪明 当我尝试将方位角 仰角 距离值转换为 ECEF 位置时 我遇到了问题 我使用 PyEphem 获取
  • UIKitBackgroundCompletionTask - iPhone 应用程序崩溃

    我遇到了一个问题 还没有任何解决方案 在用户按下 主页 按钮后 我使用后台任务处理程序来启动一些数据获取 代码是这样的 void startRequest UIApplication app UIApplication sharedAppl