0

このメソッドを使用して、ストーリーボード「 dequeueReusableCellWithIdentifier 」で既に作成されたセルを返します。ここにコードがあります

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    switch ( indexPath.row )
    {
        case 0:
            CellIdentifier = @"map";
            break;

        case 1:
            CellIdentifier = @"blue";
            break;

        case 2:
            CellIdentifier = @"red";
            break;
    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier     forIndexPath: indexPath];


    return cell;
}

しかし、私はこのエラーを持っています:「NSInternalInconsistencyException」、理由:「識別子マップでセルをデキューできません - 識別子のペン先またはクラスを登録するか、ストーリーボードのプロトタイプセルを接続する必要があります」

注:ここにあるのでストーリーボードに識別子を追加しましたが、機能しません。もう1つの重要なことは、このプロジェクトは実行されていましたが、停止したことです!!!! appcoda.com からダウンロードします

4

1 に答える 1

1

ここで、Apple docは次のように述べています。

重要:このメソッドを呼び出す前に、registerNib:forCellReuseIdentifier: または registerClass:forCellReuseIdentifier: メソッドを使用して、クラスまたは nib ファイルを登録する必要があります。

…</p>

セルをデキューする前に、このメソッドまたは registerNib:forCellReuseIdentifier: メソッドを呼び出して、テーブル ビューに新しいセルの作成方法を指示します。指定されたタイプのセルが現在再利用キューにない場合、テーブル ビューは提供された情報を使用して新しいセル オブジェクトを自動的に作成します。

同じ再利用識別子を持つクラスまたは nib ファイルを以前に登録した場合、cellClass パラメータで指定したクラスが古いエントリを置き換えます。指定した再利用識別子からクラスを登録解除する場合は、cellClass に nil を指定できます。

したがって、次のようにクラスを登録する必要があります。

- (void) viewDidLoad {
    [super viewDidLoad];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"map"];
}
于 2013-08-05T11:35:37.283 に答える