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]'

前の行で 9 のカウントを NSLog し、例外で境界が[0 .. 4].

例外は「ランダムに」スローされるようです..場合によっては、配列の境界が問題なく、インデックス 8 でオブジェクトを取得できることを意味します...しかし、それ以外の場合は、境界が[0 .. 2]?

View Controller内(プロジェクト内のVCのみ)

theBufferManager = [[HitBufferManager alloc] init];

.h ファイル: @property NSMutableOrderedSet* theTopValues;

.m ファイル: @synthesize theTopValues;

-(id)HitBufferManager の初期化: theTopValues = [NSMutableOrderedSet ordersSetWithCapacity: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 に答える