- Во-первых, так должна выглядеть ваша сущность.
Теперь изначально нет сохраненных данных. Каждый раз, когда вы создаете новую задачу, сначала извлекайте все данные и сохраняйте их в tasksArray, сортируйте их по индексу, а затем добавляйте новую задачу в массив и сохраняйте новую задачу в основных данных.
// Fetch data here and sort the array.
tasksArray = tasksArray.sorted { $0.index < $1.index }
// Create new Task.
let newTask = Task(context: (UIApplication.shared.delegate as!
AppDelegate).persistentContainer.viewContext)
newTask.addInfo = "Info"
newTask.nameOfTask = "Some Task"
// Append new task.
tasksArray.append(newTask)
newTask.index = Int64(tasksArray.endIndex - 1)
// Save new task to Core Data here.
(UIApplication.shared.delegate as! AppDelegate).saveContext()
Теперь все задачи имеют индекс (0,1..так на). Вы можете проверить это, выбирая задачи. Теперь при каждом перемещении строк выполните следующее:
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath:
IndexPath,
to destinationIndexPath: IndexPath) {
let itemMove = taskArray[sourceIndexPath.row]
taskArray.remove(at: sourceIndexPath.row)
taskArray.insert(itemMove, at: destinationIndexPath.row)
}
Теперь проблема в том, что все индексы изменились. Решение состоит в том, чтобы обновить все значения, когда строки закончат перемещение.
for (index,task) in tasksArray.enumerated(){
task.index = Int64(index)
}
(UIApplication.shared.delegate as! AppDelegate).saveContext()
// Fetch data here again and save it to tasksArray.
tableView.reloadData()
Пожалуйста, проверьте это работает, так как у меня не было времени, чтобы проверить это самостоятельно. Надеюсь, что это решит вашу проблему.