1. ホーム
  2. ios

[解決済み] データソースからのセルの取得に失敗しました。

2022-02-08 04:09:57

質問

以下のコードのどこが問題なのでしょうか?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSString *CellIdentifier  = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    cell.textLabel.text = @"hello";

    return cell;
}

そして

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 2;
}

と表示されるのですが データソースからセルを取得できませんでした。

例外の全体は

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x7ffe0b092800; frame = (0 97; 414 590); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ffe0acf3b10>; layer = <CALayer: 0x7ffe0aceb6e0>; contentOffset: {0, 0}; contentSize: {414, 88}>) failed to obtain a cell from its dataSource (<AllContactsViewController: 0x7ffe0ace60f0>)'

テーブルビューのデリゲートとデータソースを設定しました。

どうすればいいですか?

あなたのエラーは、以下のことを示唆しています。 cellForRowAtIndexPath が返されます。 nil これは、再利用可能なセルをデキューするのに失敗しているからだと思われます。もし確認したいのであれば、現在のdequeue呼び出しの後にブレークポイントを設定すればよいでしょう。次のようなものが見つかると思います。 cell に設定されています。 nil .

もし、プロトタイプセルを作ってもらうような最新のXcodeテンプレートを使っているなら、おそらくこれを代わりに使うべきでしょう。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

Xcodeのテンプレートを使っていない場合は、この行をとにかく使って、次のように独自の再利用識別子を登録してください。

[self.tableView registerClass:[UITableViewCell self] forCellReuseIdentifier:@"Cell"];

これで問題は解決したはずです。 Swiftユーザー向けに詳しく書きました。