ios - 保存包含相同核心数据对象的多个数组

标签 ios swift core-data

var done = [Item]()
var list = [Item]()

func loadItems() {
    let request: NSFetchRequest<Item> = Item.fetchRequest()
    do {
        list = try context.fetch(request)
    } catch {
        print("Error fetching data from context: \(error)")
    }
    self.tableView.reloadData()
}

func saveItems() {
    do {
        try context.save()
    } catch {
        print("Error saving context: \(error)")
    }
}

当我将列表中的项目标记为已完成时,我试图将其添加到已完成列表并将其从原始列表中删除。但是,saveItems() 方法不会保存已完成列表中的项目,并且 loadItems 方法不会加载已完成列表的项目。

最佳答案

When I mark an Item in the list as done I am trying to add it to the done list and delete it from the original list. However, the saveItems() method doesn't save the items in the done list and the loadItems method doesn't load the items for the done list.

有两种方法可以解决这个问题:

  1. 使 done 成为 Item 的属性。然后你可以保存所有项目而不用担心它们在哪个列表中。你可以获取所有项目并通过过滤掉标记为完成的项目来创建你的“待办事项”列表,并通过创建“完成”列表过滤掉未标记为完成的项目。获取请求可能比仅仅“获取所有项目”复杂得多。您可以改为说“获取所有 done 为假的项目。”

  2. 修复您的代码,使 loadsave 方法实际上加载和保存两个列表,并且项目的状态继续取决于哪个列出它。Core Data 非常擅长跟踪对象之间的关系,因此您可以轻松地拥有一个具有 donetodo 属性的对象,每个属性都是与 Item 的一对多关系,将项目标记为完成只是将项目从一组移动到另一组的问题。

关于ios - 保存包含相同核心数据对象的多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53342442/

相关文章:

swift - 如何一起使用Codable和Coredata?

ios - 从 Xib 加载 View 在自动布局后调整框架 subview 的大小

swift - 对实体数组执行 `map` 时获取 nil 值

ios - 创建一个纯内存 NSManagedObject 模型

ios - SwiftUI 从 CoreData 设置初始选择器值

Swift、核心数据、可选的 Integer16 和 keyPath

ios - Objective-C:如何从 UITableViewCell 播放视频?

ios - 向 uicollectionview 添加静态背景

ios - 如何以编程方式在 TableView 的静态单元格中添加图像

ios - 快速将 UITextField 设置为 mm-dd-yy 格式