Xcode: Swift - 如何保存拖放表格视图单元格位置(核心数据)?

Xcode: Swift - How to save drag and drop tableview cell positions (core data)?

我对 swift 开发还很陌生。在拖放单元格后,我需要一些帮助保存单元格的位置。问题是我可以毫无问题地拖放单元格。然而,当我导航到其他视图控制器或当我关闭并打开模拟器时,单元格重置到旧位置

我按照另一个 Whosebug 的答案来做这个但是我找不到任何与我的答案相关的 question.I 已经发布了我用来执行拖放功能的代码。感谢您的帮助,谢谢。

var notes = [Notes]()
var managedObjectContext: NSManagedObjectContext!

@IBOutlet weak var tableview: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()
    
    managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    
    tableview.dragDelegate = self
    tableview.dropDelegate = self
    tableview.dragInteractionEnabled = true
}

override func viewWillAppear(_ animated: Bool) {
    self.tableview.reloadData()
    loadData()
}

func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
    let dragItem = UIDragItem(itemProvider: NSItemProvider())
    dragItem.localObject = notes[indexPath.row]
    return [ dragItem ]
}

func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) {
    
}


 func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    let mover = notes.remove(at: sourceIndexPath.row)
    notes.insert(mover, at: destinationIndexPath.row)
    
    
    tableview.reloadData()

}

更新 1:我试过了,但没用

 func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: 
 IndexPath, to destinationIndexPath: IndexPath) {
    let mover = notes.remove(at: sourceIndexPath.row)
    notes.insert(mover, at: destinationIndexPath.row)

    do{
                try notes.managedObjectContext.save()
            } catch {
                print("Rows could not be saved")
            }




    
 

我看到有一个 loadData() 方法,但看不到它的实际作用。

我想如果 loadData() 方法从 Core Data 加载数据并存储到 notes 数组?如果是这样,那么它应该是问题所在。由于您修改了 notes(通过调用 notes.remove()notes.insert()),但是您还没有将 notes 保存到 Core Data,所以在 loadData() 之后 [=18] =] 被调用时,您再次将核心数据中的原始数据加载到 notes

要修复它,您应该在 notes.insert() 之后将 notes 保存到 Core Data。