1

我正在尝试将一个添加CCSprite到一个数组中,以便我可以用另一种方法来做一些事情。数组只是简单地以@interface这样的方式声明NSMutableArray *currentBombs; 。然后我尝试将其添加(CCSprite*)sprite到数组中[currentBombs addObject:sprite];

问题是,当我记录[currentBombs count]或尝试使用其中的任何对象或记录它或其他什么时,它是空的。由于 CCSprite 是 NSObject 的子类,我认为您可以将其添加到数组中吗?我在这里做错了什么?

编辑:更详细的代码:

-(void)aMethod:(CCSprite*)Sprite{
//...
    currentBombs = [[NSMutableArray alloc]init];
    [currentBombs addObject:sprite];
}

然后我在方法中访问它

-(void)checkDamageForBomb{
currentBombs = [[NSMutableArray alloc]init];
int cB = [currentBombs count];

for (int q = 0; q <= cB;q++)
{   
    CCSprite *bomb = [currentBombs objectAtIndex:q];//Crashes
    CGPoint bombPos = [self tileCoordForPosition:bomb.position];//Crashes 

//........ }
4

2 回答 2

1

发生这种情况是因为每次调用 checkDamageForBomb: 时都会重新分配数组。您应该只实例化对象一次。

我的建议是使用延迟初始化的属性,并始终调用self.currentBombs

@interface MyClass()

@property (nonatomic) NSMutableArray* currentBombs;

@end

@implementation MyClass

#pragma mark - Accessors

- (NSMutableArray*) currentBombs
{
    if(!_currentBombs)
        _currentBombs=[NSMutableArray array];
    return _currentBombs;
}

这样,您必须更改代码并始终调用self.currentBombs

-(void)checkDamageForBomb{

    for(CCSprite* bomb in self.currentBombs)  // I find fast enumeration more elegant.
    {
        CGPoint bombPos = [self tileCoordForPosition:bomb.position];
        ...
    }
    ...
}

这样您就不必关心分配它,访问器会在您第一次调用它时为您完成。

于 2013-05-24T19:48:40.433 回答
0

您正在初始化变量 currentBombs 两次。在例如 ViewDidLoad 中初始化一次

于 2013-05-24T19:47:21.283 回答