Поэтому я делал rss-ридер для своей школы и закончил писать код. Я запустил тест, и он дал мне эту ошибку. Вот код, на который он ссылается:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
if (cell == nil) {
cell =
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
вот ошибка в выводе:
2012-10-04 20: 13: 05.356 Считыватель [4390: c07] * Ошибка подтверждения в - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20: 13: 05.357 Reader [4390: c07] * Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «невозможно удалить из очереди ячейку с идентификатором Cell - необходимо зарегистрировать перо или класс для идентификатора или подключить ячейку-прототип в раскадровке» ' * Первый стек бросить вызов: (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935) libc ++ abi.dylib: завершить вызов, выдав исключение
и вот код, который он показывает на экране ошибки:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
пожалуйста помоги!
источник
Ответы:
Вы используете
dequeueReusableCellWithIdentifier:forIndexPath:
метод. Документация для этого метода говорит , что это:Вы не зарегистрировали перо или класс для идентификатора повторного использования
"Cell"
.Глядя на ваш код, вы, похоже, ожидаете, что метод dequeue вернется,
nil
если у него нет ячейки, чтобы дать вам. Вам нужно использоватьdequeueReusableCellWithIdentifier:
для этого поведения:Обратите внимание, что
dequeueReusableCellWithIdentifier:
иdequeueReusableCellWithIdentifier:forIndexPath:
это разные методы. Смотрите документ для первого и второго .Если вы хотите понять, почему вы хотите использовать их
dequeueReusableCellWithIdentifier:forIndexPath:
, ознакомьтесь с этими вопросами и ответами .источник
dequeueReusableCellWithIdentifer:forIndexPath:
(Введен в iOS6) является улучшение хорошо, так как вам не нужно , чтобы проверить , если ячейка равен нулю. (ТакUITableViewController
работает аналогичноUICollectionView
) Но да, раздражает то, что это изменение не является комментарием в шаблоне и что сообщение о подтверждении / сбое не является более полезным.dequeueReusableCellWithIdentifier:forIndexPath:
когда использовал, когда я должен был использоватьdequeueReusableCellWithIdentifier:
.Я думаю, что эта ошибка о регистрации вашего пера или класса для идентификатора.
Чтобы вы могли сохранить то, что вы делаете, в функции tableView: cellForRowAtIndexPath и просто добавить приведенный ниже код в ваш viewDidLoad:
Это сработало для меня. Надеюсь, это может помочь.
источник
viewDidLoad
и перемещала эту логику, чтобыviewDidAppear
исправить это.Хотя этот вопрос довольно старый, есть еще одна возможность: если вы используете раскадровки, вам просто нужно установить CellIdentifier в раскадровке.
Поэтому, если ваш CellIdentifier имеет значение «Cell», просто установите свойство «Identifier»:
Обязательно очистите вашу сборку после этого. XCode иногда имеет некоторые проблемы с обновлениями раскадровки
источник
Identifier
собственности. Спасибо!у меня была та же проблема с заменой на
решена
источник
Скорее всего, проблема заключается в том, что вы настраиваете custom
UITableViewCell
в раскадровке, но вы не используете раскадровку, чтобы создать экземпляр,UITableViewController
который использует этоUITableViewCell
. Например, в MainStoryboard у вас естьUITableViewController
вызываемый подкласс,MyTableViewController
и у вас есть пользовательская динамика,UITableViewCell
вызываемаяMyTableViewCell
с идентификатором «MyCell».Если вы создаете свой заказ,
UITableViewController
как это:Он не будет автоматически регистрировать вашу пользовательскую ячейку tableview для вас. Вы должны вручную зарегистрировать его.
Но если вы используете раскадровку для создания экземпляра
MyTableViewController
, вот так:Хорошая вещь случается!
UITableViewController
автоматически зарегистрирует вашу пользовательскую ячейку таблицы, которую вы определили в раскадровке.В вашем методе делегата "cellForRowAtIndexPath" вы можете создать ячейку табличного представления следующим образом:
dequeueReusableCellWithIdentifier автоматически создаст новую ячейку для вас, если в очереди на переработку нет доступной для повторного использования ячейки.
Тогда вы сделали!
источник
instantiateViewControllerWithIdentifier
для инициализации моего viewController, спас мой день!Я просто добавлю, что Xcode 4.5 включает новый
dequeueReusableCellWithIdentifier:forIndexPath:
код шаблона по умолчанию - потенциальная ошибка для разработчиков, ожидающих более старый
dequeueReusableCellWithIdentifier:
метод.источник
В вашей раскадровке вы должны установить «Идентификатор» вашей ячейки-прототипа таким же, как ваш «CellReuseIdentifier» Cell. Тогда вы не получите это сообщение или не будете вызывать эту функцию registerClass :.
источник
Решение Swift 2.0:
Вам нужно зайти в инспектор атрибутов и добавить имя для ваших ячеек. Идентификатор:
Затем вам нужно сделать так, чтобы ваш идентификатор соответствовал вашей очереди:
альтернативно
Если вы работаете с пером, вам может понадобиться зарегистрировать свой класс в cellForRowAtIndexPath:
Справочник по классам UITableView от Apple гласит:
Вот код из фреймворка Apples Swift 2.0:
источник
SwitchCell.self
это?UITableViewCell.self
Кажется, что замена его на работает для меня. Возможно добавьте примечание в ответеЕсли вы собираетесь использовать пользовательские статические ячейки, просто прокомментируйте этот метод:
и дайте ячейкам идентификатор в «Инспекторе атрибутов» в раскадровке.
источник
Я даю вам ответ в Objective C и Swift. До этого я хочу сказать
Итак, мы добавляем
registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier:
в методе viewDidLoad мы должны зарегистрировать ячейку
Цель С
ОПЦИЯ 1:
ВАРИАНТ 2:
в приведенном выше коде
nibWithNibName:@"CustomCell"
укажите ваше имя пера вместо моего имени пера CustomCellСВИФТ
ОПЦИЯ 1:
ВАРИАНТ 2:
в приведенном выше коде
nibName:"NameInput"
укажите имя пераисточник
Работа с Swift 3.0:
источник
Прошлой ночью я потратил несколько часов на то, чтобы выяснить, почему моя программно сгенерированная таблица не работает [myTable setDataSource: self]; Это было нормально, комментируя и выскакивая пустую таблицу, но вылетало каждый раз, когда я пытался добраться до источника данных;
Я настроил делегирование в файле h: @interface myViewController: UIViewController
У меня был исходный код данных в моей реализации, и все равно BOOM !, каждый раз сбой! СПАСИБО "xxd" (номер 9): добавление этой строки кода решило это для меня! На самом деле я запускаю таблицу с кнопки IBAction, поэтому вот мой полный код:
Кстати, кнопка должна быть связана как IBAction и как IBOutlet, если вы хотите привязать к нему всплывающее окно.
UIPopoverController * popoverController3 объявляется в файле H непосредственно после @interface между {}
источник
FWIW, я получил эту же ошибку, когда я забыл установить идентификатор ячейки в раскадровке. Если это ваша проблема, то в раскадровке щелкните ячейку табличного представления и установите идентификатор ячейки в редакторе атрибутов. Убедитесь, что установленный здесь идентификатор ячейки совпадает с
источник
У меня была та же проблема, была та же ошибка, и у меня это работало так:
Может быть, это будет полезно для кого-то еще.
источник
Я правильно все настроил в раскадровке и выполнил чистую сборку, но продолжал получать сообщение об ошибке « необходимо зарегистрировать перо или класс для идентификатора или подключить ячейку прототипа в раскадровке »
Исправил ошибку, но я все еще в растерянности. Я не использую «пользовательскую ячейку», просто представление с вложенным табличным представлением. Я объявил viewcontroller как делегат и источник данных и убедился, что идентификатор ячейки совпадает в файле. что тут происходит?
источник
Некоторым это может показаться глупым, но я понял. Я получал эту ошибку, и проблема для меня заключалась в том, что я пытался использовать статические ячейки, но затем динамически добавлять больше материала. Если вы вызываете этот метод, ваши клетки должны быть динамическими прототипами. Выберите ячейку в раскадровке и под инспектором Атрибутов самое первое говорит «Содержимое», и вы должны выбрать динамические прототипы, а не статические.
источник
Просто дополнение ответов: может быть, время, когда вы все настроите правильно, но вы можете случайно добавить некоторые другие пользовательские интерфейсы
.xib
, напримерUIButton
: просто удалите дополнительный пользовательский интерфейс, это работает.источник
Убедитесь, что CellIdentifier == идентификатор ячейки в раскадровке, оба имени совпадают. Надеюсь, это работает для вас
источник
В моем случае сбой произошел, когда я позвонил
deselectRowAtIndexPath:
Линия была
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Меняя его на
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
ИСПРАВЛЕННУЮ МОЮ ПРОБЛЕМУ!Надеюсь, это кому-нибудь поможет
источник
В Swift эту проблему можно решить, добавив следующий код в свой
метод.
источник
Натолкнулся на эту ошибку. Идентификатор повторного использования ячейки bc был ошибочным - ошибка новичка, но это происходит: 1. Делает так, что идентификатор повторного использования ячейки SURE не содержит орфографических ошибок или пропущенных букв. 2. В том же духе не забывайте подсчет капитализации. 3. Нули - это не «О» (О)
источник