首页 > 解决方案 > 仅在对应于 dispatch_async 导出(ad-hoc 或在 AppStore 上)时,Objective-c 应用程序才会崩溃

问题描述

我在 iOS 应用程序上遇到崩溃,但只有在它被存档和导出(临时或在 AppStore 上)时。开发版没有任何问题。

崩溃与主队列上的 dispatch_async 相对应。尤其是:

    dispatch_async(dispatch_get_main_queue(), ^{
    ...
            [self.view hideToastActivity];
            self.view.userInteractionEnabled = YES;
            if (self.delegate != nil) {
            [self.delegate postFooObject:foo];
        }
    ...
    });

可以看到,代码块调用了一个委托方法,其代码为:


- (void)postFooObject:(Foo *)foo {
        [self.view makeToastActivity:CSToastPositionCenter];
        self.view.userInteractionEnabled = NO;

        [[FooManager sharedManager] postFoo:&foo completition:^(BOOL success) {

            if (success) {
                [self.view hideToastActivity];
                self.view.userInteractionEnabled = YES;

                [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
            }
}

postFooObject委托方法包含对 REST 端点的调用,该端点成功返回

由于它是一个生产应用程序,当应用程序被 iSO 控制台应用程序杀死时,我设法打印了日志。以下屏幕截图显示了崩溃时的设备日志:

在此处输入图像描述

应用程序进程由“赔偿”标识。

在 dispatch_async 本身之外执行 dispatch 块中包含的所有指令就可以了

你能帮助我吗?谢谢

标签: iosobjective-cdispatch-async

解决方案


主队列应仅用于 UI 任务,如果您正在进行休息调用,请尝试使用全局队列并使用主队列来使用新数据更新 UI 组件。

您是在模拟器还是 iPhone 上测试开发版本?这可能会对此代码产生不同的响应,但我认为更改队列应该可以解决您的问题!:)

祝你好运!


推荐阅读