2010-10-19 5 views
1

Je souhaite mettre à jour la position des Particules pour stocker cette information J'utilise NSMutableArray. Je veux faire une mise à jour 1 fois par 2 secondes par exemple. Pour cela j'essaie d'utiliser ce code.NSMutableArray EXC_BAD_ACCESS lorsque j'essaie d'en lire

//ParticlesLayer.h 
@interface ParticlesLayer : CCLayer { 
CCQuadParticleSystem *particle; 
NSMutableArray *partilesCoordinates; 
} 

@property (assign, readwrite) NSMutableArray *partilesCoordinates; 
-(void)partilesMove:(ccTime)dt; 
-(void)particleInit; 

//ParticlesLayer.m 
@implementation ParticlesLayer 

@synthesize partilesCoordinates; 

-(id) init { 
self = [super init]; 
    partilesCoordinates = [NSMutableArray arrayWithCapacity:5]; 
    [partilesCoordinates addObject: [NSValue valueWithCGPoint:ccp(67,152)]]; 
    [partilesCoordinates addObject: [NSValue valueWithCGPoint:ccp(140,147)]]; 
    [partilesCoordinates addObject: [NSValue valueWithCGPoint:ccp(198,100)]]; 
    [partilesCoordinates addObject: [NSValue valueWithCGPoint:ccp(261,126)]]; 
    [partilesCoordinates addObject: [NSValue valueWithCGPoint:ccp(364,135)]]; 
    // bla bla bla 
    //... 
    //bla bla bla 
    [self schedule:@selector(partilesMove:) interval:2]; 
    return self; 
} 

-(void)emittersMove:(ccTime)dt{ 
    NSMutableArray *newParticlesCoordinates = [NSMutableArray arrayWithCapacity:5]; 
    CGPoint newPoint; 
    for (int i = 0; i < 5; ++i) { 
     [self particleInit]; 
     NSLog(@"%@", [particlesCoordinates objectAtIndex:i]); // on this part of code i have problem 
     particle.position = [[particlesCoordinates objectAtIndex:i] CGPointValue]; 
     [self addChild:emitter]; 
     newPoint = emitter.position; 
     newPoint.x += 15; 
     newPoint.y += 15; 
     [newParticlesCoordinates addObject:[NSValue valueWithCGPoint:newPoint]]; 
    } 
    [partilesCoordinates removeAllObjects]; 
    [partilesCoordinates newParticlesCoordinates]; 
    [newParticlesCoordinates removeAllObjects]; 
} 

Mais quand je le lance sur la première fonction d'appel et la lecture du tableau particlesCoordinates i ont un message de la console: Programme signal reçu: "EXC_BAD_ACCESS". Comment je peux faire un horaire de travail normal?

Répondre

3

[NSMutableArray arrayWithCapacity:5][NSMutableArray arrayWithCapacity:5] renvoie une instance de libération automatique, qui est nettoyée un certain temps après avoir quitté l'initialiseur. Maintenant, le pointeur partilesCoordinates pointe vers une mémoire non définie. Vous devez faire:

partilesCoordinates = [[NSMutableArray arrayWithCapacity:5] retain]; 

ou

partilesCoordinates = [[NSMutableArray alloc] initWithCapacity:5]; 
+0

Merci C'est un travail très agréable – Mike

2

Modifier ceci:

@property (assign, readwrite) NSMutableArray *partilesCoordinates; 

à ceci:

@property (nonatomic, retain) NSMutableArray *partilesCoordinates; 

et changer ceci:

partilesCoordinates = [NSMutableArray arrayWithCapacity:5]; 

à:

self.partilesCoordinates = [NSMutableArray arrayWithCapacity:5]; 

Lorsque vous synthétisez un setter pour une propriété "assign", l'accesseur ne conserve pas la valeur que vous lui transmettez.

+0

Bonne prise, ne voit pas l'utilisation de la propriété et ont donc manqué sa mauvaise déclaration. – DarkDust

Questions connexes