У меня есть UITableView
, который указан в порядке убывания, и каждая ячейка tableview связана с файлом. Данные для таблицы представлены с NSFetchResultsController
. Я включил несколько удалений строк, но удаление выполнения, похоже, не запрограммировано правильно. Если у меня всего 5 строк, пятая строка будет наверху с индексом 0 и названием файла «track5». Строка 4 будет иметь файл «track4» и индекс 1 и так далее вплоть до строки 1 с файлом «track1» и индексом 4. У меня также есть NSLog, который выводит индекс каждой удаляемой строки и связанный файл.Удаление нескольких ячеек из таблицы данных ядра Удаление неправильной строки
При удалении, если выбрать строки 4,3, и 2 из 5 строк, я в конечном итоге удаление 4, 3 и 1.
Мои NSLog первый показывает индекс 1 и Track4 удаляется, следующий индекс 2 и трек 3 будет удален, затем индекс 3 и трек1 вместо трека2. Я предполагаю, что это происходит потому, что строки удаляются один за другим, а индекс каждой оставшейся строки изменяется из-за удаления предыдущих ячеек. Если я выберу строки 2, 3 и 4 в этом порядке, все удалит отлично. Его только тогда, когда я удаляюсь в порядке убывания. Каков наилучший способ исправить это?
-(void) newMultiDelete
{
NSArray *selectedRows = [self.audioTable indexPathsForSelectedRows];
BOOL deleteSpecificRows = selectedRows.count > 0;
if (deleteSpecificRows)
{
for (NSIndexPath *selectionIndex in selectedRows)
{
Recording * recording = [self.fetchCon objectAtIndexPath:selectionIndex];
NSString * pathOfLastTrack = [self.managedDocument pathOfLastTrack];
NSLog(@"Index path %li and title %@", (long)selectionIndex.row, recording.audioURL);
[self.managedDocument.managedObjectContext deleteObject:recording];
NSURL * audioURL = [[NSURL alloc] initWithString:recording.audioURL];
[self.managedDocument removeFile:audioURL];
}
}
[self.managedDocument.managedObjectContext save:nil];
[self.managedDocument updateSaveContext];
[self.audioTable reloadData];
}