【问题标题】: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
  • 我已经尝试过了,但它不起作用,谢谢。

标签: swift core-data swiftui swiftui-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()
}

【讨论】:

    猜你喜欢
    • 2017-02-18
    • 2016-11-29
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多