数组检查的异常边界是错误的



有任何线索可以解释为什么下面指示的行会引发异常吗?

-(double)calibrationValueAtIndex:(int)index
{
    NSLog(@"count: %d   index: %d",[theTopValues count], index);
    return [[theTopValues objectAtIndex:index] doubleValue];  // exception happening here
}
2012-07-23 21:51:16.448 TestAppTimerAndHits[15130:f803] count: 9   index: 7
2012-07-23 21:51:22.339 TestAppTimerAndHits[15130:f803] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSOrderedSetM objectAtIndex:]: index 7 beyond bounds [0 .. 4]'

它如何在前一行中NSLog计数为9,然后在异常中报告边界为[0 .. 4]

异常似乎是"随机"抛出的。。在某些情况下,数组边界很好,这意味着我可以在索引8处获得对象……但在其他情况下,它会报告低至[0 .. 2]的边界?

视图控制器(项目中只有VC一个)

theBufferManager=[[HitBufferManager alloc]init];

在.h文件中:@属性NSMutableOrderedSet*TopValues;

在.m文件中:@综合TopValues;

-HitBufferManager的(id)init:TopValues=[NS可变有序集orderedSetWithCapacity:numToStore];//返回一个自动发布的版本。

添加/编辑单个项目:

        [self sortTopValues];
        if([theTopValues count]<numToStore)
        {
            [theTopValues addObject:[NSNumber numberWithDouble:windowVal]];
        }
        else if(logVal> [[theTopValues objectAtIndex:0] doubleValue])
        {
            [theTopValues replaceObjectAtIndex:0 withObject:[NSNumber numberWithDouble:logVal]];
        }

尝试更改:在.h文件中:@property NSMutableOrderedSet*TopValues;

到.h文件中的:@property(strong)NSMutableOrderedSet*TopValues;

看看是否修复了它。

这确实是一个多线程问题。在我对NSOrderedSet进行排序和修改的代码段周围放置了一个位置恰当的@synchronized{},似乎可以解决我读回它的部分的问题。我现在的问题是试图弄清楚我的另一条线索是从哪里来的。是吗

CADisplayLink* gameTimer;
gameTimer = [CADisplayLink displayLinkWithTarget:self
                                        selector:@selector(updateDisplay:)];
[gameTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

和/或这会启动线程吗?

 AudioUnitSetProperty(_effectState.rioUnit,
                      kAudioUnitProperty_SetRenderCallback,
                      kAudioUnitScope_Global, 
                      bus0, 
                      &callbackStruct, 
                      sizeof(callbackStruct);
 AudioOutputUnitStart(_effectState.rioUnit);

最新更新