Я использовал приведенный ниже код, чтобы удалить элемент из TableView и соответствующий файл из архива.Если я удаляю 4-й элемент TableView, он удаляет 4-й файл с сохраненными значениями.Поскольку TableView является динамическим (сортировка элементов или изменение количества отображаемых элементов), а архив стабилен, код удаляет неправильные файлы, поскольку 1-й элемент в представлении может быть 6-м в сохраненных файлах.Поэтому, когда представление перезагружается, элемент удаляется, но не тот, который я хотел.(Я использовал NSCoding для хранения значений).Каждый элемент имеет уникальный идентификатор, а каждый файл - уникальное имя (которое является идентификатором), но я могу получить только идентификатор действительно удаленного элемента, а не тот, который я удаляю пальцем.Не могли бы вы мне помочь?Спасибо.
self.tableOfExpences.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
//REMOVING FROM THE STORED VALUES================
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let paths:[String] = Bundle.paths(forResourcesOfType: "dat", inDirectory: documentsPath)
if paths.count > 0 {
do {
try FileManager.default.removeItem(atPath: paths[indexPath.row])
print("deleted File has been removed")
} catch {
print("an error during a removing")
}
}
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
Попытка решить возможную проблему синхронизации
Сначала я проверяю, что табличное представление знает, что оно показывает.И кажется, что массивы синхронизированы.В области отладки я прочитал:
первая ячейка является опциональной (" Chocolate ") и имеет опциональный идентификатор ( 6 )
вторая ячейка является опциональной (" телефон ") и имеет опциональный идентификатор ( 7 )
Выше указаны правильные значения.
Затем проведу пальцем, чтобы удалить вторую ячейку (телефон) с ID 7 , и он сообщит мне, что будут удалены совершенно другие расходы с другим идентификатором и другим путем.
Для вышеуказанной проблемы решение пришло с [indexPath.row-1] вместо [indexPath.row].
if indexPath.row == 0 {
self.tableOfExpences.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
} else {
self.tableOfExpences.remove(at: indexPath.row-1)
tableView.deleteRows(at: [indexPath], with: .fade)
}
Приведенное выше решение сработало, но когда я удалил последний элемент, приложение упало.Поэтому после просмотра похожих вопросов было решено вернуться к [indexPath.row] вместо [indexPath.row-1] и просто изменить порядок строк, чтобы сначала удалить данные из файла
try FileManager.default.removeItem(atPath: paths[indexPath.row])
* 1033.* а затем реализовать
self.tableOfExpences.remove(at: indexPath.row)
Я надеюсь, что вышеупомянутое поможет кому-то с подобными проблемами. Конечно, без свойства filePth и отладки синхронизации я все равно буду наблюдать за сбоем кода. Спасибо за отличноеПомогите.Это была чудесная неделя.