0

我遇到EXC_BAD_ACCESS了问题cocos2d-iphone 1.0.1

我已启用NSZombies,希望查看我在代码中的什么位置访问了我不应该访问的对象。

问题发生在CCMenu.m,这里:

-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    NSAssert(state_ == kCCMenuStateTrackingTouch, @"[Menu ccTouchMoved] -- invalid state");

    CCMenuItem *currentItem = [self itemForTouch:touch];

    if (currentItem != selectedItem_) {
        [selectedItem_ unselected];   // <--- selectedItem_ is a zombie
        selectedItem_ = currentItem;
        [selectedItem_ selected];
    }
}

我可以观察到那selectedItem_是一个僵尸。

这是CCMenu代码,不是我的——我应该看看我自己的代码。所以我看一下回溯:

在此处输入图像描述

这并没有真正帮助我:回溯没有到达我自己的代码。那是cocos2d-iphone代码。

那我应该怎么做才能解决这个错误呢?

4

1 回答 1

-1

Omega,您应该小心所有权:

if (currentItem != selectedItem_)
        selectedItem_ = currentItem; // is plain wrong on non ARC mode.

您应该为 selectedItem_ 合成保留的 setter

@property(nonatomic, retain) CCMenuItem* selectedItem;

...

@synthesize selectedItem;

然后使用setter赋值。不是简单的指针分配。

self.selectedItem_ = currentItem;
// is actually kind of
// [selectedItem_ autorelease]
// selectedItem_ = [currentItem retain]
于 2013-10-23T09:56:10.400 回答