Я столкнулся с этой ошибкой при попытке удалить ячейку с помощью настраиваемой кнопки.Удалить UITableViewCell с помощью пользовательского UIButton
* Нагрузочный приложение из-за неперехваченного исключением 'NSRangeException', причина: '* - [__ NSArrayM removeObjectAtIndex]: индекс 1 за пределами [0 .. 0]
Вот как мой код структурирован. У меня есть пользовательский UITableViewCell
, который содержит UIButton
, у которого есть действие, которое удаляет ячейку. Действие для удаления ячейки находится в моем основном контроллере View, который содержит фактические indexPath
для ячеек. Эта структура отлично работает.
Heres действие для удаления ячейки.
NSIndexPath *indexPath = [self globalIndexPath];
[self.array removeObjectAtIndex:[indexPath row]];
[db deleteTaskAtIndex:[indexPath row]];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationFade];
Когда я объявляю выше indexPath
, свойство globalIndexPath
устанавливается в моей cellForRowAtIndexPath
, придавая ему значение исходной indexPath
. Вот как я это объявил.
[self setGlobalIndexPath:indexPath];
Теперь я положил некоторые NSLogs
здесь там регистрировать indexPath
. Например, в методе viewWillAppear
и методе viewDidLoad
, и оба дают мне точный indexPath
, и я даже проверил выходы array
, и все они возвращают точные результаты, поэтому я действительно не знаю, почему это дает мне ошибку.
Вот код в моей пользовательской ячейке, чтобы определить, когда кнопка нажата.
NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
if (!notificationArray || !notificationArray.count)
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteSignal" object:nil];
}
else
{
UILocalNotification *notif = [notificationArray objectAtIndex:[checkbox tag]];
[[UIApplication sharedApplication] cancelLocalNotification:notif];
}
А потом удалить ячейки с помощью NSNotificationCenter
с ключом DeleteSignal
.
Попробуйте установить точку останова, когда [indexPath row] is = = [self.array count] перед каждым удалением ...или утверждать, что строка меньше, чем count. Кроме того, любой шанс, что вы удаляете несколько элементов без обновления таблицы? –
Я попробую точку останова, но Да, я попытался перезагрузить мой «tableView» в своих «viewDidLoad» и «viewWillAppear». – Souljacker
Я сделал инструкцию if перед и после моих функций удаления и поместил журнал, но я точно не знаю, как это будет работать. – Souljacker