gpt4 book ai didi

objective-c - iOS 6 : CoreAnimation: warning, 删除了未提交 CATransaction 的线程

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:46 26 4
gpt4 key购买 nike

我收到一个未提交的 CATransaction 警告,我无法接缝解决。我的应用程序工作正常,它正在做我期望的每一件事,屏幕按照我需要的速度更新标签,一切看起来都很好。

    Dec 10 10:40:10 my-iPhone myAppName[5967] <Warning>: CoreAnimation: warning, deleted thread with uncommitted CATransaction; set CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces.

我设置了 CA_DEBUG_TRANSACTIONS=1 并找到了以下 list 。

    Dec 10 10:43:45 my-iPhone myAppName[5994] <Warning>: CoreAnimation: warning, deleted thread with uncommitted CATransaction; created by:
0 QuartzCore 0x348fc65d <redacted> + 220
1 QuartzCore 0x348fc541 <redacted> + 224
2 QuartzCore 0x348fc325 <redacted> + 24
3 QuartzCore 0x34900489 <redacted> + 44
4 QuartzCore 0x34905091 <redacted> + 456
5 QuartzCore 0x34904ebf <redacted> + 42
6 QuartzCore 0x34904e91 <redacted> + 44
7 myAppName 0x000d9ec1 -[MainViewController updateProgress:] + 56
8 Foundation 0x3a75067d <redacted> + 972
9 libsystem_c.dylib 0x397d6311 <redacted> + 308
10 libsystem_c.dylib 0x397d61d8 thread_start + 8

导致此警告的代码如下所示:

   - (void)updateProgress:(NSString*) myLabelString
{
//this is updating a UILabel on the main view
[myLabel setText:myLabelString];

}

它是从我调用 performSelectorinBackground 的 for 循环中调用的:

for (;;) {
// Do stuff here to set up the info for the string

[self performSelectorInBackground:@selector(updateProgress:) withObject:myLabelString];
usleep(100000);
if (stopLoop == YES) {
// do stuff before we exit for loop
break;
}

}

我已经尝试了几件事,主要是为了确保在退出选择器“updateProgress”之前完成对 myLable 的更新,唯一的效果是将时间 (+56) 更改为更大的数字。我也尝试过使用:

    [UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0f];
// edit UILabel here
[UIView commitAnimations];

我在另一篇文章中尝试过这个,但由于我没有使用核心动画,所以我对编译器反对将“CATransaction”作为未声明的标识符并不感到惊讶。

      [CATransaction begin];
[CATransaction setDisableActions:YES];
//
[CATransaction commit];

关于如何确定标签更新是否完成有什么建议吗?正如我所说,该应用程序正在运行,我只需要清除此警告即可。

最佳答案

此问题已在开发者论坛上得到解答。事实证明,我是在后台线程上执行 UIKit 工作。

我改了行:

    [self performSelectorInBackground:@selector(updateProgress:) withObject:myLabelString];

收件人:

    [self performSelectorOnMainThread:@selector(updateProgress:) withObject:myLabelString waitUntilDone:NO];

我也尝试将 WaitUntilDone 设置为 YES,这也奏效了。

关于objective-c - iOS 6 : CoreAnimation: warning, 删除了未提交 CATransaction 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13807955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com