Проблемы UITableView с cellForRowAtIndexPath

Я пытаюсь заполнить uitableview несколькими разделами. Это - мой код:

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

case 1:
[[cell textLabel] setText:[usersTeachers objectAtIndex:(indexPath.row+1)]];
return cell;
break;

Я получаю эту ошибку, когда я пытаюсь загрузить представление:

2009-12-28 21:09:48.380 FSS[2046:207] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit/UIKit-984.38/UITableView.m:4709
2009-12-28 21:09:48.381 FSS[2046:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

Массив в том индексе регистрируется как законная строка, но это не возвращает ячейку правильно. Таким образом это не загружается мимо этой точки. Помогите.

18
задан Haydn Dufrene 29 December 2009 в 02:46
поделиться

3 ответа

Мне кажется, что у вас есть частично видимый корпус переключателя, в котором он возвращает ячейку для случая 1. Ваша ошибка заставляет меня думать, что вы возвращаете нулевую UITableViewCell какую-то ветку в вашем корпусе переключателя.

Убедитесь, что все пути из этого корпуса переключателя возвращают действительный UITableViewCell объект.

Что вы возвращаете для случая 0? Другими словами, что вы возвращаете за первую строку, которую UITableView запрашивает?

Вот пример кода из одного из моих проектов, Он может дать вам хорошую отправную точку, чтобы увидеть, где вы ошибаетесь:

- (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] autorelease];
    }

    NSInteger section = [indexPath section];

    switch (section) {
        case 0: // First cell in section 1
            cell.textLabel.text = [collectionHelpTitles objectAtIndex:[indexPath row]];
            break;
        case 1: // Second cell in section 1
            cell.textLabel.text = [noteHelpTitles objectAtIndex:[indexPath row]];
            break;
        case 2: // Third cell in section 1
            cell.textLabel.text = [checklistHelpTitles objectAtIndex:[indexPath row]];
            break;
        case 3: // Fourth cell in section 1
            cell.textLabel.text = [photoHelpTitles objectAtIndex:[indexPath row]];
            break;
        default:
            // Do something else here if a cell other than 1,2,3 or 4 is requested
            break;
    }
    return cell;
}
28
ответ дан 30 November 2019 в 07:44
поделиться

Не знаю, почему "дело 1:" сидит там совсем один, но если это дело ДРУГОЕ, чем 1, то оно провалится, и что бы ни случилось после этого, оно будет возвращено. Убедитесь, что вы ВСЕГДА возвращаете ячейку.

2
ответ дан 30 November 2019 в 07:44
поделиться

Вероятно, вы не вернете ячейку для indexPath.row==0 (ваш 'случай 1' подозрителен...). Но не могу сказать, пока вы не разместите весь оператор switch.

Попробуйте вернуть 'ячейку' вне оператора switch, вы лучше поймете, что происходит. Тогда у вас не будет неудачного утверждения.

2
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: