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;
}
Что я делаю неправильно? Я проверил все два раза.. но не вижу ошибки.
Спасибо за вашу помощь!
Ответы
Ответ 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";