0

ええ、これは私を通して、または私が何が起こっているのか理解するまでしばらくの間ループします。Appleが本日Xcodeの最終バージョンをリリースし、昨日iOS 4がリリースされたので、私はついに自分のアプリをiOS4に移植することを検討し始めました。

そこで、新しいSDKをダウンロードして、作業を開始しました。アプリで少し作業した後、アクセス不良エラーが発生したときの驚きを想像してみてください(割り当てが解除されたオブジェクトと通信しようとしました)。私はそれらのエラーが嫌いなので、何をすべきかを理解するのは難しいです。それで、私は最後の45分間、割り当てを解除したオブジェクトを見つけようとしていました。何を変更したのか思い出せず、エラーメッセージも役に立ちませんでした。NSZombies(Zombies !!!)を有効にしたところ、次のエラーが発生しました:

2010-06-22 15:38:28.655 ProjectPidgey[17783:207] *** -[CCTargetedTouchHandler claimedTouches]: message sent to deallocated instance 0xd834b30

これは、見た目と同じくらい便利です。私はCocos2Dにいるので、もう存在しない何かに触れていると思いますか?しかし、私のコードではそのようなものは見つかりませんでした。それで、気まぐれに、私は古いバージョンのXcodeを使用しました。コンパイルして、iOS3.0を実行しているシミュレーターにインストールしました。うまくいきました。チャームのように、私が作ったのと同じように。

だから今、私の質問は、ここで何が起こっているのかということです。悪いExcエラーを引き起こすSDK4と3の違いは何ですか?何か案は?それとも、cocos2dの問題であり、更新する必要がありますか?

編集: 私はいくつかのいじりをして、このコード行を削除することによってそれを見つけました:

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchPoint = [touch locationInView:[touch view]];
    touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint];
    if ( ![super containsTouchLocation:touch] ) return NO;
    [self.engine playerHitRedDot:self];
    //[self.parent removeChild:self cleanup:YES]; //REMOVED THIS LINE
    return YES;
}

その後、それは動作します。したがって、CCTargedTouchハンドラーが私のスプライトにリンクされているように見え(タッチすると削除されます)、誰かがすべてがうまくいかない...しかし、スプライトを削除する(または少なくとも消える)必要がありますが、私は記憶に配慮したい)、どうすればこれを行うことができますか?

ありがとう!

4

1 に答える 1

1
2010-06-22 15:38:28.655 ProjectPidgey[17783:207] *** -[CCTargetedTouchHandler claimedTouches]: message sent to deallocated instance 0xd834b30

それはとても便利です。何が悪かったのかを正確に伝えています。の過剰リリースされたインスタンスにCCTargetedTouchHandlerは、メソッドが呼び出されていました。

すべてのCocos2dベースのプロジェクトには完全なソースが埋め込まれており、Instrumentsを使用してゾンビを追跡している場合は、オブジェクトが作成、保持、および/またはリリースされた場所の正確なバックトレースを確認できます。

Cocos2dのバグかもしれませんが、コードを読んでいるとは思えません。これは、以前はクラッシュをトリガーしなかったアプリケーションのオーバーリリースのように見えますが、現在はトリガーしています。あるべきものが保持されていないか、あるべきものがnil出ていないか、および/または安全でない方法でスレッド間で何かを渡している。

于 2010-06-23T04:32:52.740 に答える