NSArray问题

时间:2010-08-12 02:27:07

标签: iphone nsarray

我尝试生成6个随机数并将它们放入全局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
)

onTimer函数每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);
}

如果我在onTimer函数中使用Nslog数组,我会得到愚蠢的输出:

Japanese.lproj

编辑:

viewDidLoad中的

只保留NSArray:

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

2 个答案:

答案 0 :(得分:2)

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

希望有所帮助。

答案 1 :(得分: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
}