4

さまざまなデバイスでアプリケーションをテストしています。アプリは iPhone 5 では問題なく動作しますが、iPod touch 4g でテストすると、次のエラーが発生します。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***  [__NSArrayMinsertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(0x33f252a3 0x3bba397f 0x33e6f8d9 0x51e25 0x35e180c5 0x35e1814d 0x35e180c5 0x35e18077 0x35e18055 0x35e1790b 0x35e17e01 0x35d405f1 0x35d2d801 0x35d2d11b 0x37a1f5a3 0x37a1f1d3 0x33efa173 0x33efa117 0x33ef8f99 0x33e6bebd 0x33e6bd49 0x37a1e2eb 0x35d81301 0x4fc8d 0x3bfdab20)
libc++abi.dylib: terminate called throwing an exception

クラッシュしているコードは次のとおりです。

/********/
    NSMutableArray *titulosCampoTextArray = [[NSMutableArray alloc] init];
    for (int i = 0; i < campos.count; i++) {

        SignupCell *cell = (SignupCell*)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        [titulosCampoTextArray addObject:cell.textField.text];
    }
/********/

UIView 内の UITableView でカスタム プロトタイプ セル (SignupCell.h) を使用しています。

エラー、またはその修正方法が見つかりません。

編集:どちらのデバイスも iOS 6.1.3 を実行しており、私は Xcode 4.6.1 を使用しています。

4

2 に答える 2

5

UITableView-cellForRowAtIndexPath:メソッドはnil、呼び出したときにセルが画面に表示されていない場合に戻ります。

私の推測では、iPhone 5 ではテーブルにすべての行を一度に表示できますが、短い iPod touch では最後の 1 つまたは 2 つのセルが表示されず、結果として-cellForRowAtIndexPath:が返さnilれ、アプリがクラッシュします。

-cellForRowAtIndexPathモデルデータのリクエストに頼るべきではありません! ビューコントローラーは、テーブルビューではなく、データを担当します。

-tableView:cellForRowAtIndexPath:ビュー コントローラーのデータ ソース メソッドでテーブル ビュー セルのテキストを設定する場合と同じ方法で、モデル データにアクセスします。

于 2013-04-18T06:33:37.450 に答える