【发布时间】:2020-10-04 08:55:24
【问题描述】:
我有一个实体Favourites,它包含诸如id、name 之类的值,但问题是它正在创建项目的多个副本,我希望它只存储唯一的值。如何使用 Core Data 做到这一点?
这是我的代码:
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let newFav = Favourites(context: context)
if let id = self.itemsViewModel.items?.results?[indexPath.item].id {
newFav.id = id
}
if let name = self.itemsViewModel.items?.results?[indexPath.item].name {
newFav.name = name
}
self.saveItem()
我在警报中执行此操作,并且在该关闭之外是我的 saveItem() 函数,一切正常,但我试图只保存一个具有一个 id 的项目。我正在考虑检查 id 是否存在,但我不太确定如何使用 CoreData 来做到这一点
func saveItem() {
do {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
try context.save()
} catch {
print("Error saving context \(error)")
}
}
【问题讨论】:
-
这看起来像一个设计问题,为什么你从你的视图模型中获取数据而不是告诉视图模型保存数据?你的数据源是什么,你不是已经获取了现有的收藏夹对象吗?
-
我的视图模型负责从 api 获取数据。我正在收藏夹数组的另一个视图控制器中获取数据
-
那么您是从一些外部 Api 下载数据并将其存储在本地吗?是否要更新现有对象?
-
我从 api 获取数据,项目太多,所以我创建了一个选项来收藏项目并将其存储在核心数据中。这样用户就不必向下滚动很多,只需查看他们收藏的项目。