Out of Bound错误 - 使用变量同步AVaudioPlayer当前时间

时间:2014-06-26 17:40:25

标签: ios objective-c nsarray avaudioplayer indexoutofboundsexception

我有一种方法可以不断更新audioPlayer的当前时间。在同一方法中,我有一个变量,只要当前的audioPlayer时间值等于存储在数组中的时间值,该变量就会递增。我正在使用以下代码,它可以正常工作直到第5个值,然后应用程序崩溃并发出超出索引的数组错误。我不确定我做错了什么。整个想法是突出显示存储在变量x中的索引路径上的一行,并在timeArray中存储的特定时间后增加突出显示

在接口

处定义的变量
NSInteger x;
NSArray *timeArray;

检查播放时间方法是否每隔0.1秒更新一次NSTimer

- (void) checkPlaybackTime:(NSTimer *)thetimer {  //method gets called every 0.1s
    double time=audioPlayer.currentTime;
    double currentNumber = [((NSNumber*)[timeArray objectAtIndex:x]) doubleValue];//gives the values stored in Array
      if (time>0 && time<currentNumber){      //i used this method to increment x
        NSInteger*a =&x;
        [self highlightcell:a];
          }

      if (time>=currentNumber && time< 27.00){
        NSInteger*b =&x;
        [self highlightcell:b];
        x++;
       }
}

1 个答案:

答案 0 :(得分:0)

假设您的timeArray包含5个对象。然后,数组中最后一个对象的索引为x = 4。现在,如果将x增加到5,那么-objectAtIndex:会尝试从数组中获取第6个对象,由于该数组只包含5个对象,因此无法正常工作 - 因此该索引为out of bounds数组(因为只有索引0..4是x的有效值)。

为避免出现这种情况,在实际尝试访问数组元素之前,应始终检查索引是否在数组的当前范围内:

double currentNumber = 0.;
if (x < [timeArray count]) {
    currentNumber = [[timeArray objectAtIndex:x] doubleValue];
}