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的所有项”
修复代码,使load
和save
方法可以加载和保存这两个列表,并且项的状态继续取决于它在哪个列表中。核心数据非常善于跟踪对象之间的关系,因此您可以很容易地拥有一个具有done
和todo
属性的对象,每个属性都是与Item
的多对多关系,标记一个项完成只是将项从一个集移动到另一个集的问题。
关于ios - 保存包含相同核心数据对象的多个阵列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53342442/