2011-06-20 2 views
0

誰でも、このテーブルビューコードがクラッシュする理由を知りましたか?UITableViewクラッシュ

これ、私のviewDidLoad中:

itemArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 

その後、私のcellForRowAtIndexPath方法でこの:(そのオブジェクト1は、画面をオフになるように、つまり)

cell.textLabel.text = [NSString stringWithFormat:@"Item (%@)", [itemArray objectAtIndex:indexPath.row]]; 

私はスクロールダウンし、その後にスクロールバックオブジェクト1を試してみると、この前の行でクラッシュします。

私はこのようなもので問題のある行を交換した場合それは結構です。

cell.textLabel.text = @"test"; 

UPDATE:回答は、配列が保持されていなかったということでした。 は、この行は、問題を修正:

itemArray = [[NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil] retain]; 

OR

itemArray = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 
+1

クラッシュログとはなんですか? – PengOne

+0

あなたのコードをもっと見ることなく、言うことはできませんが、あなたの配列はテーブルの行数とは違っていますか? – Moshe

+0

最初に問題はないが、セルをスクロールして画面上にスクロールするとクラッシュするという事実は、ReuseIdenitifiersに問題がある可能性があることを示しています。 – PengOne

答えて

3

あなたitemArrayは保持されていないようです。 arrayWithObjects:は、自動解放されたオブジェクトを返します。 retainまたはcopyにするか、または保持属性の構文糖を使用する必要があります。

+0

宣言されていて、プロパティ(非原子的、保持)があり、合成されている場合は、代わりに '[self setItemArray:...]'を実行します。 – PengOne

+0

@Eikoもし問題が残っていたら、 '-cellForRowAtIndexPath:' – bioffe

+0

@bioffeの最初の '-objectAtIndex:'コールで直ちに壊れてしまいます。いいえ、必須ではありません。テーブルが最初にセルを要求すると、ビューがロードされる可能性があります。したがって、自動解放プールはまだ周囲にある可能性があります。 – Eiko

関連する問題