Невозможно заставить deleteRowsAtIndexPaths работать - PullRequest
5 голосов
/ 08 января 2012

У меня есть UITableView и планировщик, работающий в фоновом режиме, удаляющий записи из базового объекта данных. Каждый раз, когда объект удаляется, я хочу, чтобы представление таблицы обновлялось соответствующим образом.

Но я продолжаю получать это надоедливое сообщение об ошибке при попытке удалить строку из табличного представления.

* Завершение работы приложения из-за необработанного исключения NSInternalInconsistencyException, причина: «Недопустимый путь индекса для использования с UITableView. Пути индекса, передаваемые в табличное представление, должны содержать ровно два индекса, определяющих раздел и строку. Пожалуйста, используйте категорию на NSIndexPath в UITableView.h, если возможно. "

код:

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:0];
NSUInteger row = [indexPath row];

NSMutableArray* files = [[NSMutableArray alloc] initWithArray:fileNames];
[files removeObjectAtIndex:[indexPath row]];
[fileNames dealloc];
fileNames = [NSArray arrayWithArray:files];

//[self.fileNames removeObjectAtIndex:row];
[self.tableDraft deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];

PS: Я также пытался [tableView reloadData];, но у него есть нежелательные побочные эффекты, стирая выбранный индекс.

Ответы [ 3 ]

21 голосов
/ 08 января 2012

Рассматривали ли вы, следуя совету сообщения?Ваш индексный путь не содержит ни строки, ни компонента раздела.Используйте +[NSIndexPath indexPathForRow:inSection:] для создания объекта пути индекса, чтобы он содержал информацию, которую требует представление таблицы:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
2 голосов
/ 08 января 2012

Вам нужно использовать это:

NSIndexPath * indexPath = [NSIndexPath indexPathForRow: rowIndex надрез: sectionIndex];

0 голосов
/ 30 апреля 2015

Используйте вот так

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag-1 inSection:0];

CGRect rectOfCellInTableView = [objTableView rectForRowAtIndexPath:indexPath];

CGRect rectOfCellInSuperview = [objTableView convertRect:rectOfCellInTableView toView:[objTableView superview]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...