代码之家  ›  专栏  ›  技术社区  ›  Mario

NSART问题

  •  0
  • Mario  · 技术社区  · 14 年前

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

    现在在视图中加载:

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

    如果我将zufallszahlen nsarray记录在viewdidload中,我会得到我想要的输出:

    (
    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函数中,我会得到愚弄输出:

    Japanese.lproj
    

    编辑:

    在VIEWDIDLOAD中,只保留NSARRAY:

    zufallsZahlen = [self generateNumbers];
    [zufallsZahlen retain];
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Firoze Lafeer    14 年前

    您没有保留数组。记住,像[nsset sortedarrayusingselector]这样的方法返回一个自动释放的数组。

    希望有帮助。

        2
  •  1
  •   Matt Williamson    14 年前

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