-2

私は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' が原因でアプリを終了しています。理由: 'セル識別子を持つセルをデキューできません - 識別子のペン先またはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります'

4

1 に答える 1

0

質問 2:最初のNSLog行を作成するときに最初に印刷されます (サンプル プロジェクトでテストし、iPad で 24 回印刷されました)。セルが既に存在し、それらを再利用するため、残りの時間は印刷されません。 .

質問 1&3:はiOS 6 の新forIndexPath:indexPath機能です。識別子のセルまたはカスタムクラスを登録するか、ストーリーボードでプロトタイプ セルを接続して使用する必要があります。dequeueReusableCellWithIdentifierxibUITableViewCell

于 2013-03-15T15:08:15.440 に答える