0

关于为什么下面指示的行会引发异常的任何线索?

-(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 文件中:@property NSMutableOrderedSet* theTopValues;

在 .m 文件中:@synthesize theTopValues;

-HitBufferManager 的 (id)init: theTopValues = [NSMutableOrderedSet 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]];
        }
4

2 回答 2

0

这确实是一个多线程问题。在我正在排序和修改 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);
于 2012-07-24T20:20:56.540 回答
0

尝试更改 :in .h 文件:@property NSMutableOrderedSet* theTopValues;

在 .h 文件中:@property (strong) NSMutableOrderedSet* theTopValues;

看看能不能解决。

于 2012-07-23T21:00:51.863 回答