Я столкнулся с этой ошибкой при попытке удалить ячейку с помощью пользовательской кнопки.
* Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «* - [__ NSArrayM removeObjectAtIndex:]: индекс 1 за пределами [0 .. 0] '
Вот как структурирован мой код. У меня есть пользовательский UITableViewCell
, который содержит UIButton
, который имеет действие, которое удаляет ячейку. Действие по удалению ячейки находится в моем главном контроллере View, который содержит фактический indexPath
для ячеек. Эта структура отлично работает.
Вот действие по удалению ячейки.
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
.