2011-01-24 11 views
0

何とか何とか割り振り解除されるオブジェクトに問題があります。私は問題のあるオブジェクトを見つけるためにNSZombieなどを有効にするようなさまざまなデバッグ手法を使用しました。これは、セクションヘッダーのタイトルをグループ化されたテーブルビューに表示するために使用した単純なNSMutable Arrayオブジェクトです。これは、タイトルヘッダが関数に返され、そこからオブジェクトである:オブジェクトが不思議に割り当て解除される

- (NSStringの*)のtableView:(のUITableView *)のtableView titleForHeaderInSection:(NSInteger)セクションIにobjectAtIndexを使用して値を返す

上記のオブジェクト。私はそれが境界や何かを実行していないことを確認しています。このグループ化されたtableViewは、私のカスタムsplitViewコントローラの左側に表示されます。ポートレートモードでは、すべてがうまく動作し、左側がポップオーバーになります。問題ありません。私はテーブルのように見える景色で、私はこのオブジェクトを神秘的に割り当て解除します。スプリットビューは最初の問題なしです。それから私はそれの上に来るモーダルビューを持っています。このモーダルビューを一番上に捨てると、セクションヘッダーオブジェクトはモーダル解除時に表示しようとするモーダルの下の分割ビューを不思議に衝突させます。

ポインタや手がかりはありますか?コードなし

おかげ

+0

変数の宣言、プロパティ、使用されている場所、その他の関連するコードを参考にしてください。 – raidfive

+1

コードを表示してください! – Eiko

答えて

0

問題を見つけるのは本当に難しいだろう。

実際のデバイス、シミュレータ、またはその両方でクラッシュが発生しますか?オブジェクトを手動で保持/解放しているのですか、それとも自動解放プールに入っていますか?

一般にviewDidUnloadviewWillDisappeardidReceiveMemoryWarningの方法を確認し、リリースしたものがすべて適切な方法で再作成されていることを確認してください。 複数のView Controllerでその配列を使用している場合は、View Controllerを適切なポイントに保持して解放してください。

一つの方法は、配列は次のようになりリリースする人を見つけるために:

NSMutableArrayの

のサブクラス
@interface myNSMutableArray : NSMutableArray {} 
@end 

@implementation myNSMutableArray 
-(oneway void)release { 
    NSLog(@"Being released"); 
    NSLog(@"retainCount: %i", [self retainCount]); 
    [super release]; 
} 
@end 

変更myNSMutableArrayにご謎のアレイのタイプを作成し、2の後にブレークポイントを追加デバッガがブレークポイントに到着したら、GDBにバックトレースを要求します(btコマンド)。

+0

すべての入力をありがとう。コードワイズには、インターフェイスに宣言され、tableViewのviewDidLoadで初期化されたNSMutable配列であることを除いて、実際に投稿するものはありません。私はあらゆるところを点検し、私がそれを解放しないことを保証した。私は手動でそれを保持しようとしました。使用しない。シミュレータ上でクラッシュします。このtableViewは、このオブジェクトを使用する唯一のコントローラです。私は通常のalloc-initとalloc-initWithArrayを試してみましたが、私はそれを解放せずに手動で保持していることを確認しました。希望が役立ちます。 – Bourne

+0

私は自分の答えをデバッグオプションを含めるように更新しました。あなたのクラッシュのバックトレースも役に立つかもしれません。 releaseが決して呼び出されないなら、 'dealloc' +' NSLog(@ "保持カウント%i"、retainCount)のために同じことをすることを検討してください; – Thomas

+0

ありがとう!あなたの意見が助けになりました。それは理由を説明していませんが。しかし、私は間違いを言いました。配列がインタフェースで宣言されていません。この実装ではグローバルでした。インタフェース変数に変更し、手動で保持しました。働いた。バックトレースNSLogは、私がそれが実装中にグローバルであったことに気付きました。メモリは何とか保持されていたにもかかわらず突然割り当てが解除されました。唯一の違いは、宣言をインターフェースに移して、それをクラス変数として機能させることでした。 – Bourne

0

あなたのアレイをロード(またはリロード)したら、それを保持しましたか?

+0

はい私は明示的にそれを保持していることを確認しました。 – Bourne

関連する問題