我正在尝试将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
//........ }
答案 0 :(得分: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];
...
}
...
}
因此,您无需分配它,访问者将在您第一次调用它时为您执行此操作。
答案 1 :(得分:0)
您正在初始化变量currentBombs两次。在例如初始化一次viewDidLoad中