Подтвердить что ты не робот

UITableView dataSource должен возвращать ячейку из tableView: cellForRowAtIndexPath: Exception

Я действительно не вижу свою ошибку:

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

  FriendTableViewCell *cell = (FriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
      cell = [[[FriendTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
      [[NSBundle mainBundle] loadNibNamed:@"FriendTableViewCell" owner:self options:nil];
      cell = friendCell;
  }
  cell.lblNickname.text =  @"Tester";
  return cell;
}

Что я делаю неправильно? Я проверил все два раза.. но не вижу ошибки.

Спасибо за вашу помощь!

4b9b3361

Ответ 1

Вы возвращаете friendCell, и это, скорее всего, ноль.

Ваш код выглядит отлично, поэтому убедитесь, что ваш файл интерфейса построен правильно. В FriendTableViewCell.xib убедитесь, что владелец файла - это ваш контроллер табличного представления, и вы правильно настроили ячейку для выхода в friendCell (который я предполагаю UITableViewCell).

Ответ 2

Для меня это сработало:

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

UPDATE
Поместите вышеуказанный код следующим способом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Просто поставьте ПЕРЕД редактирование tableViewCell

Ответ 3

Вы создаете FriendTableViewCell, а затем игнорируете его и устанавливаете его равным (предположительно) переменной экземпляра с именем friendCell.

Я предполагаю, что вы ожидаете, что friendCell будет установлен при вызове метода loadNibNamed. По-видимому, он не устанавливается.

Итак, у вас есть две проблемы с этим кодом. Во-первых, не выделяйте ячейку дважды.

cell = [[[FriendTableViewCell ....
[[NSBundle mainBundle .....
cell = friendCell;

Очевидно, что создание новой ячейки и назначение ее ячейке бесполезно, если вы переписываете ее вторым вызовом для назначения ячейке.

Во-вторых, friendCell, вероятно, ноль. Убедитесь, что NIB настроен правильно, и выходы, указывающие на нужные места.

Ответ 4

Я знаю, что это старый пост, но, я только что столкнулся с этой ошибкой, мне показалось очень странным, поскольку приложение находилось в тестировании, поэтому никаких свежих сборок в течение нескольких дней не было, и все, что я сделал, это перезагрузка телефон, и он решил это.

Ответ 5

Я обнаружил, что эта проблема возникла при попытке создать мой UITableViewCell перед инициализацией моего представления таблицы:

Здесь регистрация класса перед созданием tableView вызовет ошибку, поместив ее после исправления ошибки.

[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:bCellIdentifier]; 

tableView = [[UITableView alloc] initWithFrame:CGRectZero];
tableView.delegate = self;
tableView.dataSource = self;

[self addSubview:tableView];

tableView.keepInsets.equal = KeepRequired(0);

Ответ 6

Посмотрите здесь: Загрузка TableViewCell из NIB

Это документ Apple для этого точного предмета.

//This is assuming you have tvCell in your .h file as a property and IBOutlet
//like so:
TableViewController.h
@property(nonatomic,retain) IBOutlet UITableViewCell *tvCell;
//Data Source Method...
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) {

    [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];

    cell = tvCell;

    self.tvCell = nil;

используйте метод loadNibNamed: owner: options для загрузки ячейки в наконечник. Задайте экземпляр ячейки для объекта nib, затем установите объект nib равным nil.

Прочитайте остальную часть документации, которую я связал, чтобы узнать, как получить доступ к подзонам внутри вашей ячейки.

Ответ 7

Не забудьте установить cell identifier в Interface Builder.

Ответ 8

Используйте это,

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID];

Я сохранил несколько часов только с этими строками.

Ответ 9

Убедитесь, что ваш идентификатор повторного использования в вашем файле NIB/Storyboard для вашей ячейки прототипа соответствует тому, что вы назвали CellIdentifier

 static NSString *CellIdentifier = @"Cell";