CALayerのサブクラスはアニメーション化するときEXC_BAD_ACCESSを生成しますが、直接インスタンスは生成しません。

touchesMoved イベントハンドラでは、なぜこれが中断しますか:

CALayer *slayer = (CALayer*)[[self.layer sublayers] objectAtIndex:0];
slayer.position=CGPointMake(x,y);

しかしこれはうまくいく:

CALayer *slayer = (CALayer*)[[self.layer sublayers] objectAtIndex:0];

[CATransaction begin];//temporarily disable layer animations
[CATransaction setValue:(id)kCFBooleanTrue  forKey:kCATransactionDisableActions];
slayer.position=CGPointMake(x,y);
[CATransaction commit]; 

CALayer のサブクラスでは、両方とも CALayer
クラスのインスタンスで動作するようです。

より詳しく…

誠に恐れ入りますが、iOS 4.3ではアプリが正常に動作しましたが、パラメータをアニメートするときに同じコードが
EXC_BAD_ACCESS を生成しています。

削除されたオブジェクトにメッセージを送信するときに EXC_BAD_ACCESS
が生成されることを理解しています。この問題を解決するために、すべてのレイヤが保持され、キャッシュに保存されるので、キャッシュをクリアするまでは残ります。問題のレイヤーの保持カウントもチェックしていますが、呼び出しが壊れているときには
3 であるため、有効なレイヤーと思われます。私は NSZombieEnabled
で実行しようとしましたが、同じ結果が得られますが、別のエラーメッセージは生成されません。

私は行方不明のものがありますか?
iOS4.3とiOS5の間で何か変わりましたか?コアアニメーションをクラッシュさせようとしていると思われるものが原因でしょうか?


fwiw:2009年6月、MacBook ProのXcode 4.2を使用しています。

ベストアンサー
申し訳ありませんが、適切な答えはありません

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です