Работает ли dequeueReusableCellWithIdentifier с ARC? - PullRequest
3 голосов
/ 04 февраля 2012

В iOS5, используя ARC и ячейки-прототипы для tableView на раскадровке, я могу заменить код ниже:

static NSString *CellIdentifier = @"Cell";

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

// Configure the cell...
return cell;

С этим простым кодом?:

UITableViewCell *cell = [tableView 
  dequeueReusableCellWithIdentifier:@"Cell"];
return cell;

Я видел это по этой ссылке:

http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1

Спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 04 февраля 2012

Эта проблема возникает из-за того, что вы не создаете MenuViewController из раскадровки. Вы создаете это так:

MenuViewController *menuViewController = [[MenuViewController alloc] init];

Этот экземпляр MenuViewController не связан с раскадровкой, поэтому он не знает о ячейках-прототипах в раскадровке.

Вам нужно зайти в свою раскадровку и установить идентификатор MenuViewController там на что-то вроде menuViewController. Затем вы можете создать экземпляр следующим образом:

MenuViewController *menuViewController =  [self.storyboard instantiateViewControllerWithIdentifier:@"menuViewController"];
0 голосов
/ 29 августа 2014

Мое решение, наконец, было таким:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier
                                                          forIndexPath:indexPath];

cell = [cell initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];

Поскольку в iOS 5.0 и выше первая строка кода никогда не будет давать нулевое значение, и я не нашел другого способа указать нужный мне стиль.Или я мог бы добавить экземпляр Table View Controller из библиотеки, а затем я мог бы отредактировать стиль в ячейке прототипа.

...