Вспомогательное действие 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.
Ответы
Ответ 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
Перетащите навигационный контроллер из библиотеки объектов в файл раскадровки и попытайтесь сделать это, он должен работать. В следующем представлении должен быть контроллер навигации.