Core Data中保存数组打乱顺序失效问题求助
Core Data打乱歌曲顺序后重新加载恢复原始顺序的解决办法
核心问题在于:你虽然更新了每个Song的order属性并保存,但重新加载数据时,没有按照order字段排序,导致Core Data默认用原始顺序返回结果。
解决步骤:
修改数据获取逻辑,按order字段排序
找到DataManager.shared.songs(singer:)方法,添加排序规则,让返回的歌曲数组按照order属性升序排列:func songs(singer: Singer) -> [Song] { let fetchRequest: NSFetchRequest<Song> = Song.fetchRequest() fetchRequest.predicate = NSPredicate(format: "singer == %@", singer) // 新增排序描述符,按order升序排列 let orderSort = NSSortDescriptor(key: "order", ascending: true) fetchRequest.sortDescriptors = [orderSort] do { return try persistentContainer.viewContext.fetch(fetchRequest) } catch { print("获取歌曲失败:\(error)") return [] } }确认保存逻辑有效
检查DataManager.shared.save()方法是否正确执行了上下文保存,确保包含类似代码:func save() throws { let context = persistentContainer.viewContext if context.hasChanges { try context.save() } }保留现有打乱逻辑
你当前的打乱并更新order的代码是正确的,无需修改:@objc func shuffleButtonPressed() { print("shuffle") songs.shuffle() for (index, song) in songs.enumerated() { song.order = Int16(index) } do { try DataManager.shared.save() tableView.reloadData() print("yesr") } catch { print("保存打乱顺序失败:\(error)") } }
这样修改后,每次重新加载页面时,viewDidLoad里获取的songs数组会按照你保存的order顺序排列,就能保持打乱后的结果了。
内容的提问来源于stack exchange,提问作者user13990880
相关产品推荐
相关产品推荐

