核心数据,@Environment(\.managedObjectContext),onMove
Posted
技术标签:
【中文标题】核心数据,@Environment(\\.managedObjectContext),onMove【英文标题】:Core Data, @Environment(\.managedObjectContext), onMove核心数据,@Environment(\.managedObjectContext),onMove 【发布时间】:2021-01-20 07:12:04 【问题描述】:我使用“核心数据”保存应用程序数据并使用“ForEach”将其显示在列表中,我提供“实体”“索引”属性,以便我可以按顺序对数据进行排序,我可以使用删除数据“.onDelete(perform: deleteList)”如下面的代码所示,但我不知道如何实现“.onMove”,任何人都可以帮助或给我一个示例代码或任何东西。
struct ListsView: View
@FetchRequest(entity: ListOfTasks.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ListOfTasks.index, ascending: true)]) private var lists: FetchedResults<ListOfTasks>
@Environment(\.managedObjectContext) private var viewContext
var body: some View
Section
ForEach(self.lists, id: \.self) list in
Text("\(list.wrappedTitle)")
.onDelete(perform: deleteList)
func deleteList(at offsets: IndexSet)
for offset in offsets
let list = lists[offset]
self.viewContext.delete(list)
try? viewContext.save()
【问题讨论】:
我认为 onMove 在这种情况下没有意义 - 你已经对列表进行了排序。 这能回答你的问题吗? SwiftUI reorder CoreData Objects in List 我已经尝试过了,但它不起作用,谢谢。 【参考方案1】:这对我有用,尝试使用你的名字是这样的:
.onMove
// make an array from the core data entity, clever part
var revisedItems: [ ListOfTasks ] = lists.map $0
// Do normal move action on array
revisedItems.move(fromOffsets: $0, toOffset: $1)
// Update index elements to correct order
for i in 0..<revisedItems.count revisedItems[i].index = i
try? viewContext.save()
【讨论】:
以上是关于核心数据,@Environment(\.managedObjectContext),onMove的主要内容,如果未能解决你的问题,请参考以下文章
阅读笔记Blockchain management and ML adaptation for IoT environment in 5G and beyond ...