我有一种方法可以不断更新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++;
}
}
答案 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];
}