0

cocos2DのCCLayerに実装されたタッチが終了しました。タッチを受信すると、メソッドが呼び出されます。ただし、メソッドを呼び出すと、「EXC_BAD_ACCESS」が原因でアプリが常にクラッシュするようです。呼び出すメソッドでは、NSMutableDictionaryから読み取ろうとします。コードは次のとおりです。

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchPoint = [touch locationInView:[touch view]];
    touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint];
    int current = 1;
    int i = 1;
    for (i=1; i<=4; i++) {
        CCNode *sprite = [layer2 getChildByTag:i];
        CGPoint worldCoord = [layer2 convertToWorldSpace:sprite.position];
        CGRect bounds = CGRectMake(worldCoord.x-sprite.boundingBox.size.width, worldCoord.y-sprite.boundingBox.size.height/2, sprite.boundingBox.size.width, sprite.boundingBox.size.height);
        //CCLOG(@"Sprite%i:%f,%f at %f,%f",i,bounds.size.width,bounds.size.height,bounds.origin.x,bounds.origin.y);
        if (CGRectContainsPoint(bounds, touchPoint)) {
            CCLOG(@"touched sprite:%i",i);
            current = i;
            [self checkSpriteTouch:current]; //error occurs when this method is called

            break;
        }
    }
}
-(void)registerWithTouchDispatcher{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:1 swallowsTouches:NO];
}


-(void)checkSpriteTouch:(int)i{
    NSMutableDictionary *dict = [storeDict objectForKey:[NSString stringWithFormat:@"Char%i",1]]; //when using debugging, app crashes here at this line
    NSNumber *boughtValue = [dict objectForKey:@"Bought"];
}

アプリケーションがクラッシュするのはなぜですか?他のtouchEndedメソッドで実装する他のすべてのメソッドは、完全に正常に機能します...よろしくお願いします!どんな助けでも大歓迎です^_^

4

3 に答える 3

0

storeDictは空ですか、それともnilですか?

また、私はそれが1ではなくiであるべきだと思います

NSMutableDictionary *dict = [storeDict objectForKey:[NSString stringWithFormat:@"Char%i",i]];
于 2012-04-25T04:06:43.617 に答える
0

だから(int)i何もしなかったcheckSpriteTouch、なぜあなたが私をあなたの方法に入れなければならないのか私には分かりません。

storeDictさらに、クラッシュしたときの「i」の値の実装を確認する必要があります。たぶん、私たちがそれをチェックできるように、ここにコードを入れなければなりません。

于 2012-04-28T17:18:01.920 に答える
0

私はついに、そのメソッドにアクセスするとアプリがクラッシュする理由を理解しました。答えは辞書にアクセスすることでした。私はそれを適切に保持していなかったので、不正アクセスの警告が発生しました。これを修正するために、ヘッダーファイルで次を使用しました:@property(nonatomic、retain)NSMutableDictionary * storeDict; そして今、すべてがうまくいきます!^ _ ^

于 2012-04-30T19:57:51.437 に答える