如何在 SwiftUI 中使用 CoreData 更改数据值?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中使用 CoreData 更改数据值?【英文标题】:How can I change a data value with CoreData in SwiftUI? 【发布时间】:2019-09-05 23:38:39 【问题描述】:使用 CoreData 和 SwiftUI 更改数据的值
我正在尝试使用列表中单元格上的按钮(心脏)修改数据的布尔值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)
【问题讨论】:
【参考方案1】:这样的事情应该可以工作。
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)
【讨论】:
我尝试使用您的答案,但item: $item
给了我一个错误:Use of unresolved identifier '$item'
尝试不带 $以上是关于如何在 SwiftUI 中使用 CoreData 更改数据值?的主要内容,如果未能解决你的问题,请参考以下文章
使用 CloudKit + CoreData,如何在没有 SwiftUI 的 @FetchRequest 的情况下从远程云更新中更新 UI?
SwiftUI CoreData - 如何更新获取请求和列表
如何将 SwiftUI 中的颜色类型存储到 CoreData 中?