2010-08-12 3 views
0

je tente de générer des nombres aléatoires 6 et les mettre dans un NSArray global, thats ce que je l'ai fait:NSArray Problème

dans MainViewController.h

NSArray * zufallsZahlen; 

j'ai fonction pour générer les numéros:

- (NSArray *)generateNumbers { 
    NSMutableSet *s = [NSMutableSet set]; 
    while([s count] < 6) { 
    NSNumber *z = [NSNumber numberWithUnsignedInteger:arc4random() % 46]; 
    if(![s containsObject:z]) 
    [s addObject:z]; 
    } 
NSArray *zahlen = [[s allObjects] sortedArrayUsingSelector:@selector(compare:)]; 

return zahlen; 
} 

maintenant dans le viewDidLoad:

zufallsZahlen = [self generateNumbers]; 
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES]; 

Si je NSLog mon zufallsZahlen NSArray dans le viewDidLoad i obtenir la sortie je veux:

(
2, 
8, 
13, 
16, 
27, 
31 
) 

La fonction ontimer crée toutes les 0,2 secondes, une balle avec le nombre réel:

-(void)onTimer:(NSTimer*)timer { 
if (indexBall > 6){ 
    //some function 
} 
else { 
    [self crateBall:[zufallsZahlen objectAtIndex:indexBall] ballId:indexBall ballX:xCoord ballY:100]; 
    [self rollBall:indexBall rollToY: 80]; 
    indexBall+=1; 
    xCoord-=40; 

    NSLog(@"%@", zufallsZahlen); 
} 

Et si je NSLog le tableau dans la fonction ontimer i obtenir la sortie de duper:

Japanese.lproj 

EDIT:

dans viewDidLoad conservent simplement le NSArray:

zufallsZahlen = [self generateNumbers]; 
[zufallsZahlen retain]; 

Répondre

2

Vous n'avez pas conserver le tableau. Souvenez-vous que des méthodes telles que [NSSet sortedArrayUsingSelector:] renvoient un tableau auto-libéré.

Espérons que ça aide.

+0

Merci beaucoup pour moi: D – Mario

1

Vous pouvez passer zufallsZahlen dans la minuterie:

zufallsZahlen = [self generateNumbers]; 
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(onTimer:) userInfo:zufallsZahlen repeats:YES]; 

- (void) onTimer:NSArray *zufallsZahlen { 
    // Do something with zufallsZahlen 
}