代码之家  ›  专栏  ›  技术社区  ›  user13990880

需要在核心数据中保存打乱的顺序

  •  0
  • user13990880  · 技术社区  · 2 年前

    我正试图打乱核心数据中数组的顺序。现在代码打乱了顺序,它试图保存打乱的顺序,但当我重新加载类时,原始顺序仍然存在。

    我试图做的是在下面的代码中。YESR正在调试部分打印。

    var songs = [Song]()
    var index = Int()
    var singer: Singer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
     
        if let singer = singer {
            songs = DataManager.shared.songs(singer: singer)
        }
        tableView.reloadData()
        
        
    }
     @objc func shuffleButtonPressed() {
        print("shuffle")
    
        // Shuffle the songs
        songs.shuffle()
    
        // Update the 'order' attribute for each song
        for (index, song) in songs.enumerated() {
            song.order = Int16(index)
        }
    
        do {
            try DataManager.shared.save() // Assuming 'DataManager.shared' is your Core Data manager
            tableView.reloadData()
            
            print("yesr")
        } catch {
            // Handle error while saving
            print("Error saving shuffled songs: \(error)")
        }
    }`
    
    0 回复  |  直到 2 年前
        1
  •  0
  •   flanker    2 年前

    目前尚不清楚底层持久层是如何实现的,也不清楚 Song 班在获取数据时应该推断出排序顺序,几乎可以肯定的是,可以通过指定 SortDescriptor

    然而,当你将每首歌的索引存储在它自己的数据类型中时,你可以在检索数据时使用它:

    songs = DataManager.shared.songs(singer: singer).sorted{$0.order < $1.order}
    

    如果你能 歌曲 符合 Comparable 基于 order 您可以直接使用的属性 .sorted()