UITableView dataSource должен возвращать ячейку из tableView: cellForRowAtIndexPath / сообщения об ошибках утверждения - PullRequest
4 голосов
/ 01 марта 2012

Реализован UITableView с пользовательским UITableViewCell с кодом ниже

    @interface ProfileSaveViewController : UITableViewController
     {
         UITableViewCell *cell0;
         UITableViewCell *cell1;
         UITableViewCell *cell2;
         UILabel *cell2Label;
     }

    @property (nonatomic, retain) IBOutlet UITableViewCell *cell0;
    @property (nonatomic, retain) IBOutlet UITableViewCell *cell1;
    @property (nonatomic, retain) IBOutlet UITableViewCell *cell2;
    @property (nonatomic, retain) IBOutlet UILabel *cell2Label;

    @end

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:               (NSIndexPath*)indexPath
  {
        if([indexPath row] == 0) return cell0;
        if([indexPath row] == 1) return cell1;
        if([indexPath row] == 2) return cell2;   
        return nil;
  }

при запуске приложения пришло следующее сообщение.

* Ошибка подтверждения в - [UITableView _createPreparedCellForGlobalRow: withIndexPath:],/SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:6072 2012-03-01 11: 11: 31.984 TestSplitView [765: f803] * Завершение работы приложения из-за невыполненного исключения «NSInternalInconsistencyException», причина: «UITableView dataSource must»вернуть ячейку из tableView: cellForRowAtIndexPath: '

Ответы [ 5 ]

8 голосов
/ 01 марта 2012

Вас просят о ячейке и возвращают nil (или, может быть, что-то еще, что не UITableViewCell). Это так просто.

Я вижу две возможности:

  • Вы возвращаете число больше 3 из tableView:numberOfRowsInSection:. Не.

  • Один или несколько ваших cell# выходов не подключены к вашему пиру или не подключены к UITableViewCell (или подклассу). Подключите их правильно.

4 голосов
/ 15 декабря 2012

Если вы используете пользовательский UITableViewCell, также возможно, что вы забыли идентифицировать «Идентификатор» на «стороне утилит» -> вкладка «Инспектор атрибутов».

Надеюсь, это поможет.

1 голос
/ 01 марта 2012
0 голосов
/ 13 февраля 2019

Вам следует проверить метод источника данных tableview на количество строк. Убедитесь, что

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return 3;
}

Если вы возвращаете больше, чем это, то ваш cellForRow вернет nil, который из источника данных tableview ожидает экземпляр UITableViewCell из-за того, что утверждение не выполнено.

0 голосов
/ 19 февраля 2016
/* Dynamic Prototype cell in UITableView */

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView ==tblUser) {
        switch (indexPath.row)
        {
            case 0:
                return Cell_0;
                break;
            case 1:
                return Cell_1;
                break;
            case 2:
                return Cell_2;
                break;
            case 3:
                return Cell_3;
                break;
            case 4:
                return Cell_4;
                break;
            case 5:
                return Cell_04;
                break;
            case 6:
                return Cell_5;
                break;
            case 7:
                return Cell_6;
                break;
            case 8:
                return Cell_7;
                break;
            default:
                return nil;
                break;
        }
    }else
return nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...