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)")
    }
}

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

最佳答案

当我将列表中的项目标记为“完成”时,我正试图将其添加到“完成”列表中,并将其从原始列表中删除。但是,save items()方法不会保存完成列表中的项,loadItems方法也不会加载完成列表中的项。
有两种方法可以解决这个问题:
使done成为Item的属性。然后你就可以保存所有的项目而不用担心它们在哪个列表中。您可以提取所有项并通过筛选出标记为“完成”的项来创建“要做”列表,通过筛选出未标记为“完成”的项来创建“完成”列表。获取请求可能比“获取所有项”复杂得多。您可以改为“获取done为false的所有项”
修复代码,使loadsave方法可以加载和保存这两个列表,并且项的状态继续取决于它在哪个列表中。核心数据非常善于跟踪对象之间的关系,因此您可以很容易地拥有一个具有donetodo属性的对象,每个属性都是与Item的多对多关系,标记一个项完成只是将项从一个集移动到另一个集的问题。

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

10-12 00:11
查看更多