сбой приложения при удалении строки из делегата cellForRowAtIndexPath uitableview

У меня есть таблица view.i я реализую функциональность, где ячейки будут затухать (уменьшать альфа в течение продолжительности 30 секунд). После завершения 30 секунд обработчик завершения анимации вида вызывается для удаления строки постоянно из источника данных (массив ). Все это происходит в методе делегата cellForRowAtIndexPath. Моя проблема заключается в синхронизации между подсчетом массива перед обновлением и после обновления.

Код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *postCellId = @"postCell"; UITableViewCell *cell = nil; NSUInteger row = [indexPath row]; cell = [tableView dequeueReusableCellWithIdentifier:postCellId]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:postCellId] autorelease]; } Post *currentPost = [posts objectAtIndex:row]; cell.textLabel.text = [currentPost postTitle]; cell.textLabel.font = [UIFont systemFontOfSize:14]; cell.detailTextLabel.text = [currentPost postDescr]; cell.detailTextLabel.font = [UIFont systemFontOfSize:10]; NSTimeInterval duration = 30; [UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction animations:^ { cell.contentView.alpha = 0; } completion:^(BOOL finished) { [self.tableView beginUpdates]; NSLog(@"delete index >> %d from array >> %@", row, posts); [posts removeObjectAtIndex:indexPath.row]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; [self.tableView endUpdates]; }]; return cell; } 

журналы:

2015-06-04 07: 22: 05.764 Feeder [1177: 60b] delete index >> 0 из массива

(«", "", "", "", "") 2015-06-04 07: 22: 05.766 Feeder [1177: 60b] удалить индекс >> 1 из массива >> ("", "", " , "") 2015-06-04 07: 22: 05.767 Feeder [1177: 60b] удалить индекс >> 2 из массива >> ("", "", "") 2015-06-04 07: 22: 05.768 Feeder [1177: 60b] удалить индекс >> 3 из массива >> ("", "")

если вы видите последний журнал, это проблема сбой.

аварийный журнал:

2015-06-04 07: 22: 05.770 Feeder [1177: 60b] * Завершение приложения из-за неперехваченного исключения «NSRangeException», причина: '* – [__ NSArrayM removeObjectAtIndex:]: индекс 3 за пределами границ [0 .. 1]'

как это исправить.

Ваша ошибка заключается в том, что вы сохраняете старый индексный блок в блоке и не обновляете его.

Например: если у вас есть 2 записи в вашем массиве, действие в полном блоке

  1. Удалить строку 0
  2. Удалить строку 1

Но, если вы удалите первую ячейку (строка 0), ваше обновление 1-й строки indexPath.row равно 0. Но вы хотите удалить 1.

Итак, я думаю, что вы можете динамически получить indexPath, а затем удалить

 [self.tableView beginUpdates]; NSIndexPath *path = [tableView indexPathForCell:cell]; NSLog(@"delete index >> %d from array >> %@", path.row, posts); [posts removeObjectAtIndex:path.row]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationNone]; [self.tableView endUpdates]; 

Я не уверен, что это сработает, просто попробуй.

Вы можете попробовать следующее:

 [self.tableView beginUpdates]; NSInteger postIndex = [posts indexOfObject:currentPost]; NSIndexPath *path = [NSIndexPath indexPathForRow:postIndex inSection:0]; NSLog(@"delete index >> %d from array >> %@", path.row, posts); [posts removeObject:currentPost]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationNone]; [self.tableView endUpdates]; 
  • Анимация серии изображений с использованием блоков в iOS 4
  • animateWithDuration setFrame не работает
  • Значения анимации перехвата ios
  • Анимация UIView в блоке завершения начинается со смещения
  • Как оживить сшитое изображение?
  • Мерцание для нескольких одновременных вызовов перехода UIViewWithView с UIViewAnimationOptionTransitionCrossDissolve на UIImageView
  • Есть ли способ использовать тени слоя и просматривать переходы вместе?
  • Как повторить определенное время анимации UIView
  • Анимированное изображение в UIImageView
  • Невозможно поместить преобразование трансформации в анимационный блок animateWithDuration в Swift
  • Анимация ключевого кадра не выполнена
  • Interesting Posts

    Как достичь этой пользовательской полосы прокрутки в IOS или что-то похожее на нее?

    Где / когда задано contentOffset?

    Как изменить значок приложения, не открывая приложение?

    Способ реализации нескольких костюмов для анимированного персонажа 3D-игры?

    Как найти каталог симулятора

    Приложение для календаря iOS / OS X и автообнаружение службы CalDAV

    Метод UICollectionView Delegate вызывается до создания экземпляра ячейки?

    быстрый набор спрайтов – AVAudioPlayer не воспроизводит одновременно несколько звуков одновременно

    WKWebView встроенное видео продолжает воспроизводить звук после выпуска

    Листы разделителя таблиц таблиц UISearchDisplayController сбой при загрузке внутри модального представления, как мне его исправить?

    iOS flickr поиск фотографии json возврат ноль

    Возможно ли настроить Ibeacon для отправки push-уведомлений на мобильный, независимо от установленного приложения в iOS7?

    Как запустить .app на устройстве iOS

    Показать / скрыть вспомогательную стрелку, когда кнопка удаления исчезает / отображается в ячейке таблицы

    swift subviews не обновляется после размотки segue

    Давайте будем гением компьютера.