私はiOS開発の初心者です。tableView の動作がわかりません。
それをテストするために、2 つの単純な tableView アプリケーションを作成し、ユーザーが tableView の最後までスクロールした場合、両方のケースで標準コード スニペットを含む 99999 行の tableView をロードしました。
アプリ 1 : TableViewWithStoryBoard cellForRowAtIndexPath: コード スニペット
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // for StoryBoard
if (cell == nil)
{
static int i;
NSLog(@"New Cells created: %d ",++i);
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.textLabel.text = [self.tableData objectAtIndex:indexPath.row];
return cell;
}
質問 1: 削除した場合
forIndexPath:indexPath from
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // for StoryBoard
StoryBoard はまだシミュレーターで正しく機能しますか? では、なぜそれが提供されたのですか?
質問 2: なぜ NSLog(@"New Cells created: %d ",++i); tableView の最後である 99999 行までスクロールしても印刷されませんか? どのシナリオで NSLog はいくつかの値を出力しますか?
アプリ 2: TableViewWithNib cellForRowAtIndexPath: コード スニペット
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// for Nib File
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.textLabel.text = [self.tableData objectAtIndex:indexPath.row];
return cell;
}
質問3: 追加すると
forIndexPath:indexPath
XIB バージョンでは、アプリケーションがクラッシュして例外がスローされますか? なぜそうなのですか?
例外またはエラー: キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'セル識別子を持つセルをデキューできません - 識別子のペン先またはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります'