NSArray 问题

发布于 2024-09-14 07:40:57 字数 1419 浏览 0 评论 0原文

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

i try to generate 6 random numbers and put them in a global NSArray, thats what i have done:

in MainViewController.h

NSArray * zufallsZahlen;

i have function to generate the Numbers:

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

Now in the ViewDidLoad:

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

If i NSLog my zufallsZahlen NSArray in the ViewDidLoad i get the Output i want:

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

The onTimer function creates every 0.2 seconds a ball with the actual Number:

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

And if i Nslog the Array in the onTimer function i get the fooling Output:

Japanese.lproj

EDIT:

in viewDidLoad simply retain the NSArray:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫瑾少女 2024-09-21 07:40:57

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

希望有帮助。

You didn't retain the array. Remember that methods like [NSSet sortedArrayUsingSelector:] return an array that is autoreleased.

Hope that helps.

扭转时空 2024-09-21 07:40:57

您可以在计时器中传递 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
}

You can pass zufallsZahlen in the timer:

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

- (void) onTimer:NSArray *zufallsZahlen {
    // Do something with zufallsZahlen
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文