2011-06-21 3 views
7

私のゲームiOSプロジェクト用リングバッファが必要です。それは、要素が出て行き入るキューと同様に機能するはずですが、バッファ内の要素の合計量は同じままでなければなりません。iOSプロジェクトでCHCircularBufferを実装する方法は?

私は、Javaを使用して正常にリングバッファを実装しましたが、私は客観的に有名ではありません。私はCHCircularBufferと呼ばれるWeb上のリングバッファの実装を見つけました:https://bitbucket.org/devartum/chdatastructures/src/4d6d7194ee94/source/CHCircularBuffer.mしかし、私はそれを正しく実装できませんでした。

循環バッファは、すべての数学的地形生成を行うTerrainManagerというクラスのプロパティです。リングバッファがTerrainManager

circularTerrainBuffer = [[CHCircularBuffer alloc] initWithCapacity:parts]; 

の実装で初期化される方法

@interface TerrainManager : NSObject{ 

    int terrainParts; 

    CHCircularBuffer* circularTerrainBuffer; 
} 

@property(nonatomic, retain) CHCircularBuffer *circularTerrainBuffer; 
@end 

これは、このバッファのインスタンスを作成し、部品のサイズプロパティを設定します。今私は、AddObjectメソッドを使用してバッファにオブジェクトを追加します。

[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]]; 

時には、この行は、エラー「exec_bad_access」を受信します。例えば。私が15の容量のバッファを初期化すると、すべてうまくいく。20でエラーが出る。

これで、描画が行われる地形クラスからバッファにアクセスしようとしました。しかし、私がオブジェクトにアクセスしようとするたびに、私は "bad_access"エラーが発生します。

NSArray *arr = [terrainManager.circularTerrainBuffer allObjects]; 

など。この行はエラーを作成します。

私のコードには何か問題があります。たぶん私はバッファを理解していないし、オブジェクトを間違って追加します。知りません。任意のアイデアや提案?

+3

FYI、CHDataStructures.frameworkは元々はhttp://cocoaheads.byu.edu/code/CHDataStructures –

答えて

3

表示しているコードのスニペットが正しいです。私はCHCircularBufferあなたが指定した方法をテストするための小さなプロジェクトを実装し、正しく動作します。だから、問題はどこかにあるはずです。

IMHOは、失敗した行にブレークポイントを設定し、addObject関数にステップインして、どこが失敗するかを確認します。配列がそこに再配置される可能性があるので、これは失敗して不正なアクセスを与えている可能性があります。 allObjectsと同じです。

とにかく問題なくテストを実行し、オブジェクトを追加し、頭や尾から削除し、問題のないすべてのオブジェクトの配列を取得することができます。

さらにコードを投稿すれば、もう少しお手伝いできます。

+0

から私のためにそれをアップアップしてアップロードできますか?例えば、 –

+0

。 megaupload.com –

+0

をご覧ください。http://dl.dropbox.com/u/29366847/provaUtility.zipを参照して、 'MainViewController'を確認してください。 'showInfo'(情報ボタンをクリック)がリングに追加され、' flipsideViewControllerDidFinish'(完了ボタンをクリック)は 'allObjects count'を記録します。それ以上の質問があれば、気軽に... – sergio

関連する問題