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

Вспомогательное действие segue (UITableViewController)

Я пытаюсь сделать segue через IB, который переключает представления при нажатии сотового аксессуара в tableView.

Изображения с моего IB:

1. Перетаскиваем из ячейки таблицы viewcontroller в другое представление и выбираем действие аксессуара → push

IB screenshot

и когда я запускаю свой проект, я получаю ошибку:

[setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого аксессуара ActionSegueTemplate

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

Мой метод cellForRowAtIndexPath::

static NSString *CellIdentifier = @"champion cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSString *cellIconName = ((championList *)[self.champions objectAtIndex:indexPath.row]).championImage;
UIImage *cellIcon = [UIImage imageNamed:cellIconName];
[[cell imageView] setImage:cellIcon];

cell.imageView.frame = CGRectMake(0.0f, 0.0f, 70.0f, 70.0f);

cell.imageView.layer.cornerRadius = 7;
[cell.imageView.layer setMasksToBounds:YES];

cell.textLabel.text = ((championList *) [self.champions objectAtIndex:indexPath.row]).championName;
cell.detailTextLabel.text = ((championList *) [self.champions objectAtIndex:indexPath.row]).championId;

return cell;

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

4b9b3361

Ответ 1

У меня возникла эта проблема, когда я нажал ctrl-перетаскивание из кнопки дополнительных аксессуаров ячейки прототипа в следующий контроллер представления. Поэтому вместо этого я сделал перетаскивание из самого контроллера табличного представления и добавил к нему немного кода.

Objective-C:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier: @"EditUser" sender: [tableView cellForRowAtIndexPath: indexPath]];
}

Swift 3.0:

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
    performSegue(withIdentifier: "EditUser", sender: tableView.cellForRow(at: indexPath))
}

Это работает для iOS 5.0 - 10.x

Ответ 2

Я получаю эту ошибку, когда запускаю мое приложение на iOS 5 на iPod Touch, а не на iOS 6 на iPhone 5.

Документы говорят, что в iOS 3.0 устаревшее действие было устаревшим. Кажется, что ошибка заключается в том, что она показана и разрешена в iOS 6.

Можете ли вы подтвердить, какую версию iOS вы тестируете?

https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITableViewCell_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instp/UITableViewCell/accessoryAction

Ответ 3

Я столкнулся с одной и той же проблемой. Прекрасно работает на iOS 6, сбой на 5.1.

То, как я решил, это использовать стандартный UITableViewCell и создать вспомогательную кнопку из UIButton, на которую я поставил segue.

Ответ 4

В iOS 5.x эта ошибка также возникает, когда вы создаете стиль стиля popover в раскадровке и (в моем случае) привязываете его к UITableViewCell.

В этом случае сообщение об ошибке является полностью вводящей в заблуждение красной селедкой.

Я предполагаю, что iOS 5.x не поддерживает привязанные сегменты popover.

Ответ 5

Перетащите навигационный контроллер из библиотеки объектов в файл раскадровки и попытайтесь сделать это, он должен работать. В следующем представлении должен быть контроллер навигации.