2012-02-29 26 views
0

私は元に戻す機能を実装し、いくつかのコードを持って、元に戻す機能がある:アレイ、メモリ管理

- (void) undo 
{ 
    drawImage.image = pathArray.lastObject; 
    [pathArray removeLastObject]; 
} 

その後、私は画面から現在の画像をキャプチャするために、1つの以上の機能を有します。この機能では、私は、関数の他の呼び出しは、プログラムのこの部分で行われていないこの

[pathArray removeLastObjectatIndex:0];

にEXC_BAD_ACCESSエラーを取得しています。たぶん配列全体を動かす問題があるかもしれないが、私は元に戻すマネージャーを使いたくない。

配列の最後のオブジェクトを取得して最初のオブジェクトを削除し、配列全体を1つ移動する方法はありますか?

注意:パスの配列はMutableArray *patharray; おかげですべて=)

私は持っていると、これを解決するためにどのようなアイデアはありません!。私は公式の文書では解決策を見つけられませんでした。

+0

ここにいくつか質問がありますが、わかりません。 1)EXEC_BAD_ACCESSが配列を使用しようとしていますが、配列への強い参照がなくなり、割り当てが解除されている可能性があります。 2)あなたの配列内のアイテムで何かしたいですか?スタックのように聞こえる、上の項目をオフにしたい。 – rooftop

+0

はい、私は5つのオブジェクトを持っています。そして、それは悪いアクセス...このエラーを示し、これについてもう一つの好奇心があります。私はこれを初めて使用します。大丈夫です.2回目に使用します.3回目に呼び出すと、不正アクセスエラーでアプリがクラッシュします。: –

+0

メモリが壊れているようです。 EXC_BAD_ACCESS – Sam

答えて

1

最終的には、このプログラムは到達可能ではない - これは、多くの状況で '元に戻す'ことは何もないことを意味し、オプションを指定してはいけません。あなたの問題は、しばしば上流にあります。

ここでは非常に当てはまらない場合は、ここに一つのアプローチです:

- (void)undo 
{ 
    if (0 == self.pathArray.count) { 
    self.drawImage.image = nil; 
    return; 
    } 

    self.drawImage.image = self.pathArray.lastObject; 
    [self.pathArray removeLastObject]; 
} 

だけでなく、[pathArray removeLastObjectatIndex:];が本当のセレクタではありませんが。

更新

有効にして、ゾンビを見つけ、すぐにオフセット参照カウントを見つけるために私の答えhereを参照してください。あなたのプログラムは決してゾンビにメッセージを送るべきではありません。

+0

私はこれを試しましたが、動作しませんし、現在私のプログラムでこれを持っています。しかし、私のアプリはこれに該当します - [pathArray removeLastObjectatIndex:0]; –

+1

@RadimHalfar私は: – justin

+0

私の間違い申し訳ありませんが、この[pathArray removeObjectAtIndex:0] nts。それが失敗した場合は、Guard Mallocを有効にして実行してください –