有任何线索可以解释为什么下面指示的行会引发异常吗?
-(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);