核心数据,@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 ...

MyBatis学习--入门案例

Mybatis事务处理

识别核心数据属性类型

Google 宣布推出隐私计算核心服务;Amazon Managed Grafana正式可用……

swiftUI核心数据模型