2011-10-23 4 views
2

標準のセルを持つテーブルビューのiPadアプリで作業しています。カスタムセルを選択すると、カスタムnibファイルが展開されて読み込まれます。これは、最初の選択のためにうまくいきます。iOS - カスタムテーブルセルの読み込みで2番目の負荷でエラーが発生する

スタンダードセルを選択するときれいにロードされ、2回目のロード時に再び正常に戻り、EXC_BAD_ACCESSエラーが発生します(xcodesエラーが発生するとは思わないが、最も抽象的であるように見える)。

私のコードは以下であり、それは再利用のための細胞、3行目デキューするときの行は次のようになります。

if([listCells objectAtIndex:indexPath.row] == @"open") { 
     NSLog(@"Loading open cell at %i", indexPath.row); 
     CustomMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomMessageCell"]; 
     //Loads the nib file and grabs the last object, presumably the table cell, as it is the only object in the file. 
     if(cell==nil) { 
      cell = [[[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" owner:self options:nil] lastObject] autorelease]; 
     } 
     UILabel *message = (UILabel *) [cell viewWithTag:1]; 
     UIButton *approve = (UIButton *)[cell viewWithTag:4]; 
     message.text = @"Test"; 
     return cell; 

すべてのヘルプは大歓迎され、感謝を!

答えて

0

あなたは、この行のautoreleaseセルべきではありません。

cell = [[[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" 
           owner:self options:nil] lastObject] autorelease]; 

はちょうどこのように作成します。

cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" 
           owner:self options:nil] lastObject]; 
+0

ありがとうございますが、削除しても問題が発生します。私はそれがメモリ問題であると仮定して、それを加えました。それはないと思いますか? –

+0

あなたはalloc、またはretainを呼び出さないので、自動解放しないでください。 – SK9

1

あなたがコンパイルされ、実際のデバイス上で実行することがありますか?場合によっては、シミュレーション上でより多くの情報を得ることができます。チェックする

また他のもの:

  • あなたはIBでnibファイルの識別子が正しくCustomMessageCellへ 設定されていることを確認する必要があります。
  • IBのサブビュー識別子が正しく設定されていることを確認してください。
  • lastObjectメソッドによって返されたように、既に自動リリースされているので、セルを自動解放しないでください。これはクラッシュのもう一つの理由を引き起こす可能性があります。

また、実際のデバイス上でアプリを実行し、ゾンビとリークプロファイリングツールを使用してプロファイルを作成してみてください。 (ちょうど "実行"の代わりに "プロファイル"を選択してください)。

これが役に立ちます。

+0

これはiPad 2でテストされていますが、識別子は正しいものであり、問​​題はセルの2回目のクリックでのみ発生するように見えます。 私はゾンビのプロフィールを見て、報告する。ありがとう! –

関連する問題