Источник данных UITableView должен возвратить ячейку из tableView:cellForRowAtIndexPath: Исключение

я на самом деле не вижу своей ошибки:

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

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

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

43
задан Ed Marty 8 February 2010 в 19:41
поделиться

3 ответа

Ты возвращаешься в "ДругКелл", и, скорее всего, ни одного.

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

66
ответ дан 26 November 2019 в 22:40
поделиться

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

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

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

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

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

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

2
ответ дан 26 November 2019 в 22:40
поделиться

Декэ является двойным концом. Очередь - нет.

-121--891483-

Очередь : можно вставить только в один конец и удалить из другого.

Deque : можно вставлять и удалять с обоих концов.

Таким образом, с помощью Deque можно моделировать Очередь , а также Стек .

Подсказка:
Deque - это сокращение от « D double e nded que ue».

-121--891478-

Смотрите здесь: Загрузка TaureViewCell из 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, а затем для объекта nil.

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

0
ответ дан 26 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

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