我正在尝试使用列表中单元格上的按钮(心脏)来修改数据的布尔值isFavorite
。
模型数据
import Foundation
import CoreData
public class VoitureItem: NSManagedObject, Identifiable {
@NSManaged public var marque: String?
@NSManaged public var modele: String?
@NSManaged public var annee: String?
@NSManaged public var energie: String?
@NSManaged public var kilometrage: String?
@NSManaged public var isFavorite: Bool
}
extension VoitureItem {
static func getAllVoitureItems() -> NSFetchRequest<VoitureItem> {
let request:NSFetchRequest<VoitureItem> = VoitureItem.fetchRequest() as! NSFetchRequest<VoitureItem>
let sortDescriptor = NSSortDescriptor(key: "isFavorite", ascending: false)
request.sortDescriptors = [sortDescriptor]
return request
}
}
我在ContentView
中使用managedObjectCOntext
和FetchRequest
来显示List
中的所有数据并创建新数据。
我想知道如何单击按钮即可更改CoreData中的isFavorite
的值。
ContentView()(主视图)
struct ContentView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: VoitureItem.getAllVoitureItems()) var voitureItems: FetchedResults<VoitureItem>
var body: some View {
NavigationView {
List {//show list of all the data}
}
}
单元格上的按钮
Button(action: {
//var fav: Bool = false
print("favorite")
//HERE - Change isFavorite in coreData
}) {
if isFavorite {
Image(systemName: "heart.fill")
.foregroundColor(Color.yellow)
} else {
Image(systemName: "heart")
.foregroundColor(Color.gray)
}
}
答案 0 :(得分:0)
类似的事情应该起作用。
List(voitureItems) { item in
ItemCell(item: $item)
}
...
struct ItemCell: View {
@Binding var item: VoitureItem
var body: some View {
Button(action: {
item.isFavourite.toggle()
}) {
if item.isFavourite {
Image(systemName: "heart.fill")
.foregroundColor(Color.yellow)
} else {
Image(systemName: "heart")
.foregroundColor(Color.gray)
}
}
}
}