我尝试生成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];
答案 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
}