2010-08-12 75 views
0

我尝试生成6张随机数,并把它们在全球的NSArray,这就是我做了什么:NSArray的问题

在MainViewController.h

NSArray * zufallsZahlen; 

我有函数生成的数字:

- (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; 
} 

现在在viewDidLoad中:

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

如果我在viewDidLoad中的NSLog我zufallsZahlen的NSArray我得到的输出,我想:

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

计时器触发函数创建每隔0.2秒球的实际数量:

-(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); 
} 

如果我的NSLog在计时器触发功能的阵列我得到的嘴硬输出:

Japanese.lproj 

编辑:

在viewDidLoad中简单地保留的NSArray:

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

回答

2

你没保留阵列。记住像[NSSet sortedArrayUsingSelector:]这样的方法会返回一个自动释放的数组。

希望有所帮助。

+0

非常感谢您为我工作:D – Mario 2010-08-12 02:57:54

1

您可以在计时器通过zufallsZahlen:

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

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