解決するためにシームできないというコミットされていない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を設定すると、次のリストが見つかりました。
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];
ラベルの更新が完了したかどうかを判断する方法について何か提案はありますか?アプリが機能していると言ったので、この警告をクリアする必要があります。