CoreAnimation:警告,已删除的线程与未提交的 CATransaction 创建者:

CoreAnimation: warning, deleted thread with uncommitted CATransaction created by:

详情:

CoreAnimation:警告,已删除带有未提交 CATransaction 的线程;创建者:

0 QuartzCore 0x00007fff86c516c2 _ZN2CA11Transaction4pushEv + 312

1 石英核心 0x00007fff86c6c9a8 _ZN2CA11Transaction15ensure_implicitEv + 276

2 石英核心 0x00007fff86c57907 _ZN2CA5Layer13thread_flags_EPNS_11TransactionE + 37

3 石英核心 0x00007fff86c6f92d _ZN2CA5Layer13needs_displayEv + 45

4 QuartzCore 0x00007fff86c6f8f8 -[CALayer needsDisplay] + 21

5 AppKit 0x00007fff89a3df37 -[NSView viewWillDraw] + 1078

6 AppKit 0x00007fff89a3d2b0 -[NSView _sendViewWillDrawInRect:clipRootView:] + 1417

7 AppKit 0x00007fff899f6f1a -[NSView displayIfNeeded] + 1216

我刚刚在两种不同的情况下从控制台发现了这个警告,并用相同的解决方案解决了它们。

根本原因是我刚刚尝试在后台线程中更新 UI 元素,在我将更新任务分派到主线程后,问题解决了。

在这里粘贴一个辅助函数,

void RunInMainThread(void (^block)(void))
{
    if (!block) {
        return;
    }

    if ([NSThread isMainThread]) {
        block();
    } else {
        dispatch_async(dispatch_get_main_queue(), block);
    }
}