私の仕事は `UITableViewについてです。プロジェクトを実行するたびに、このエラーが表示されます:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell1 - must register a nib or a class for the identifier or connect a prototype cell in a storyboard
ストーリーボードとコードで同じセル識別子を100回確認しました。コード(UITableViewController
からのコードを無効化):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
return cell;
}
テーブルビューセルプロパティの画像:
セルのUITableViewCell
のサブクラスを作成して実装しました。
なぜこれが機能しないのでしょうか?
セルの識別子が何であるかを知るための方法(コード行)?
ありがとう
編集:インターフェースビルダーのスクリーンショット。
編集2:customCell.hのテキスト
#import <UIKit/UIKit.h>
@interface customCell : UITableViewCell
@end
プロジェクトを実行すると新しいエラーが表示されます:
[<choixActiviteViewController 0x7591ac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Cell1.
choixActiviteViewControllerはUITableViewControllerのサブクラスであり、Choix Activite View Controllerのカスタムクラスです。
の代わりに:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
試してください:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
これがうまくいかない場合は、以下も追加してください:
if (cell == nil) {
cell = [[customCell alloc] init];
}
問題は、Static cells
の代わりにPrototype cells
を使用していることです。 UITableViewコンテンツタイプを変更するだけです。
OK、私のプロジェクトはようやく機能します。削除したものについていくつかのエラーが表示され、もう見つけられません。
次のプロパティを持つ新しい一意のUITableViewCell
を作成する必要があったすべてのTableViewCellを削除しました。
クラス:customCell
スタイル:基本(ただし、カスタムでも機能します)
識別子:Cell1
サントス、アブドラシャフィク、バイロバタムにご協力いただきありがとうございます。
静的セルを使用していると思います。あなたが意識的にそれをしているなら-あなたの.mファイルから3つのメソッドを削除するだけです:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
}
テーブルセルがUITableViewCellのサブクラスである場合、「基本」スタイルのセルを使用していません。属性インスペクターのスタイル設定をカスタムに変更します。
また、テーブルセルのIDインスペクターのクラスがカスタムテーブルセルサブクラスに設定されていることを確認してください。
この問題の理由は、例外から非常に明確です。
この問題の解決策の1つは、識別子のクラスを登録することです
In Swiftこれは次のように実行できます
tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")
意図的にStatic UITableViewCellsを使用している場合、通常のUITableViewポピュレーションメソッド(numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
を実装する必要はありません。
UITableViewは、ストーリーボードで定義されたセルから自動的に入力されます。最終的にtableView:cellForRowAtIndexPath:を使用して、セル内のデータをフォーマットします。 [super tableView:cellForRowAtIndexPath:]を使用してtableViewCellを取得し、ReuseIdentifier、タグ、またはindexPathを使用して、セルをそれに付随するデータに一致させます。
customCell
クラスの代わりにUITableViewCell
クラスを使用してください。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
customCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
return cell;
}
私の場合、欠落しているUITableViewCellを定義したストーリーボードはローカライズされていました。