Как мне сохранить состояние для каждой отдельной ячейки с помощью Core Data? Я решил сохранить через CoreData, но лайк сохраняется для всех ячеек сразу.
В модели Core Data есть такой атрибут, как isLiked
В классе есть переменная isLiked
, которая изменяет состояние лайка:
class ModelsViewModel: ObservableObject{
@Published var isLiked = false
func like() {
isLiked.toggle()
}
}
Вот как я сохраняю состояние лайка из Model ViewModel
И в label я использую уже
struct CellView: View{
//For CoreData
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(entity: LikedDBE.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \LikedDBE.name, ascending: true)]) var manyLikedDB: FetchedResults<LikedDBE>
//For like
@ObservedObject var cellViewModel: ModelsViewModel = ModelsViewModel()
var body: some View{
Button(action: {
let likedDBE = LikedDBE(context: self.managedObjectContext)
likedDBE.isLiked = cellViewModel.isLiked
do{
cellViewModel.like() //func from ModelsViewModel()
try self.managedObjectContext.save() //Save
} catch{
print(error)
}
}, label: {
Image(systemName: cellViewModel.isLiked ? "heart.fill" : "heart") //Хочу использовать likedDB.isLiked тут
.frame(width: 22, height: 22)
.foregroundColor(cellViewModel.isLiked ? .red : .black) //И хочу использовать likedDB.isLiked тут
})
И если я использую сellViewModel.isLiked
, то когда я нажимаю на лайк, лайк отображается только на той ячейке, на которую я нажал, но состояние не сохраняется при перезапуске приложения, если я использую likedDB.isLiked
, то “нравится” отображается во всех ячейках сразу, но “нравится” сохраняется после перезапуска,.
Я хочу, чтобы лайк был только в ячейке, на которую я нажал, и она будет сохранена после перезапуска приложения.