7

これがここで何度も尋ねられているのを見てきましたが、解決策はどれもうまくいきませんでした。ここに私のコードスニペットがあります:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellClassName = @"DemoTableViewCell_sched";
    DemoTableViewCell_sched *cell = [tableView dequeueReusableCellWithIdentifier:CellClassName];

    if (cell == nil)
    {
        NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
        cell = [topLevelItems objectAtIndex:0];
    }
    cell.fooData = [self.bugs objectAtIndex:indexPath.row];    
    return cell;
}

それから私は持っていますViewDidLoad

    cellLoader = [UINib nibWithNibName:@"DemoTableViewCell_sched" bundle:[NSBundle mainBundle]];
4

10 に答える 10

21

私の場合、テーブルビューのデータソースへの強力なポインターを保持していなかったことが原因でした。そのため、テーブルビューがスクロールされたとき、データソースはすでに解放されて nil に設定されていたため、テーブルビューの numRowsForSection が 0 になり、cellForRowAtIndexPath が nil になりました。

誰かが同様の問題を抱えている場合は、データソースやカスタム オブジェクトが適切に保持されているかどうかを確認してください。

于 2014-06-28T02:15:39.840 に答える
14

UITableViewcontroller を addSubView として追加していますか? 次に、次のようにする必要があります。

1) addChildViewController,then
2) addSubview
The problem is delegate and datasource of the tableview getting nil since the parent controller unable to a reference to the UITableViewController.
于 2016-03-16T13:35:59.700 に答える
6

私の場合、問題は次のとおりでした。

  1. ビューコントローラーのビューがモーダルにプッシュまたは表示されないという特別なケースがありましたが、それをサブビュー (view.addSubview) として別のビューに追加しました。

  2. このようにして、実際のビューはそのスーパービューによって保持されましたが、ViewController オブジェクト (テーブル ビューの DataSource であった) は保持されず、メモリ不足になりました。

  3. ビューコントローラーを(強力な)変数に割り当てて、メモリに保持する必要がありました。

于 2014-12-19T16:10:32.000 に答える
3

次のいずれかの場合、問題は解消されました。

  1. テーブル ビューには多くのセル (10 以上) が含まれています。

  2. 各セルの高さは 50 を超えています。

変。

于 2013-02-10T17:10:03.823 に答える
1

この質問にはすでに回答があることは知っていますが、グーグル社員向けです:

私の場合、問題はビューがまだ にあることでしたが、ビューのプロパティのUITableViewCell間違いのためにスクロールした後、ビューは次の下に移動し、それらを見ることができませんでした。frameUITableViewCell

受け入れられた答えが明確に言っていると思います:

次のいずれかの場合、問題は解消されました。

  • テーブル ビューには多くのセル (10 以上) が含まれています。

  • 各セルの高さは 50 を超えています。

彼は私と同様の問題を抱えていました。

于 2015-01-26T20:21:34.750 に答える
-1

コンテンツに応じて、各セルの正しい高さを計算する必要があります。

これは、UITableView デリゲート メソッドで実行できます。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
       CGFloat height;
       //Calculate height for each cell
       return height;
}
于 2013-02-11T05:23:30.883 に答える