1

この質問には十分に単純な答えがあると確信していますが、私はそれを見つけることができないようです。私の中には次のコードがありますUITableViewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell==nil)
    {
        NSLog(@"Cell is nil!");
    }

    return cell;
}

しかし、私のログ出力では、

セルはゼロです!

そしてその直後

キャッチされない例外により'NSInternalInconsistencyException'にアプリを終了、理由: 'のUITableView DataSourceがのtableViewからセルを返す必要があります:cellForRowAtIndexPath:' *まずスローコールスタック:(0x1b68d72 0x135fe51 0x1b68bd8 0xb0e315 0xcb373 0x63578 0xcb1d3 0xcff19 0xcffcf 0xb9384 0xc952e 0x691bc 0x13736be 0x215c3b6 0x2150748 0x215055c 0x20ce7c4 0x20cf92f 0x2171da2 0x1b4b4 0x1be63 0x2c2be 0x2cf9f 0x1f3fd 0x1ac5f39 0x1ac5c10 0x1adeda5 0x1adeb12 0x1b0fb46 0x1b0eed4 0x1b0edab 0x1b28f 0x1ce71

なぜこれが起こっているのか、そしてもっと重要なことに、それを修正する方法を誰かが知っていますか?

前もって感謝します。

4

4 に答える 4

3

方法がない場合は、セルを作成する必要があります

[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

テーブルビューキャッシュから未使用のセルを返します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:NSIndexPath*)indexPath
{
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil)
   {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   }

   //configure cell

   return cell;
}
于 2012-06-20T01:27:23.347 に答える
0

dequeueReusableCellWithIdentifier再利用可能な識別子が存在する場合は、渡した識別子を使用して作成済みのセルを返します。

そうでない場合は、作成する責任があります。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                   reuseIdentifier:kCustomCellID] autorelease];
}
于 2012-06-20T01:27:30.980 に答える
0

はい、このメソッドUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];は、CellIdentifierで割り当てられたセルを再利用することを意味します。ただし、この識別子でセルを割り当てていない場合、tableViewの場合、画面にいくつかのセルが割り当てられ、次のセルが再利用されます。識別子、あなたがこれを好きなら、あなたはそれがうまくいくことがわかるでしょう

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell==nil)
    {
        NSLog(@"Cell is nil!");
        cell = [[[UITableViewCell alloc] initWithSyle:UITableViewCellStyleNormal reuseIdentifier:CellIdentifier] autorelease];
    }

    return cell;
}

テストを受ける。

于 2012-06-20T01:31:35.003 に答える
0

interface builderこのクラスに使用しますか?その場合は、テーブルビューから参照することを忘れないでください。私は同じnilの問題を抱えていました、そしてこれは私の場合でした。

于 2012-06-20T04:50:49.103 に答える