-3

素朴な疑問、

テーブル ビューのセルをループして、オブジェクトを配列に追加します。

NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [self.ammoTable numberOfSections]; ++j) // loop thru sections
{
    for (NSInteger i = 0; i < [self.ammoTable numberOfRowsInSection:j]; ++i)//in each section loop thru the cells
    {
        [cells addObject:[self.ammoTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
    }       
}

これは、テーブル ビューのセルが 7 個以下である限り、完全に機能します。8 個以上を追加すると、コンソールに次のログが表示されてアプリがクラッシュします。

'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

どんな助けでも大歓迎です!

4

3 に答える 3

5

cellForRowAtIndexPath:メソッドは、インデックス パスが現在表示されていないセルを参照している場合にUITableView返すため、nil

[cells addObject:[self.ammoTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];

その場合はクラッシュします。

于 2013-05-14T19:29:32.367 に答える
1

画面に7行しかないため、クラッシュにつながります。その後、すべてが配列に追加された後、nilが返されます。あなたができることを解決するために、入力をインデックスパスとして受け取り、再利用セルを使用せずにセルオブジェクトを返すメソッドを作成することです。

于 2013-05-14T19:36:52.020 に答える
0

魔法は中にありcellForRowAtIndexPath:ます。特定の値の場合、これは を返しnilます。この方法を確認して修正してください。

于 2013-05-14T19:26:38.820 に答える