SwiftUI Core Data 删除实体的相关数据
Posted
技术标签:
【中文标题】SwiftUI Core Data 删除实体的相关数据【英文标题】:SwiftUI Core Data Delete related Data of entity 【发布时间】:2020-07-04 12:44:28 【问题描述】:我正在努力删除 SwiftUI 中的相关实体数据。 我有 2 个相关实体。 Bean(主要实体) 镜头(相关实体) 多对一 --> 每个 bean 都会有很多镜头
当我尝试构建和运行时,我收到 bean 未解析的错误。
这是我的代码:
import SwiftUI
struct ShotList: View
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Bean.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Bean.name, ascending: true)]) var beans: FetchedResults<Bean>
static let taskDateFormat: DateFormatter =
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
()
var body: some View
NavigationView
List
ForEach(beans, id: \.self) bean in
Section(header: HStack
Text(bean.wrappedName)
Text(bean.wrappedRoaster))
ForEach(bean.shotArray, id: \.self) shot in
HStack
Text(shot.wrappedTaste)
Text(shot.wrappedTexture)
Text("\(shot.yield, specifier: "%.0f") g")
Text("\(shot.doseAmount, specifier: "%.0f") g")
Text("\(shot.bruRatio, specifier: "%.0f")")
Text("\(shot.time, specifier: "%.0f") s")
Spacer()
Text("\(shot.dateOfShot ?? Date(), formatter: ShotList.taskDateFormat)").font(.footnote)
.onDelete(perform: self.deleteShot)
.font(.body)
.navigationBarTitle("Espresso Shotlist")
func deleteShot(at offset: IndexSet)
for offset in offset
let shot = bean.shotArray[offset]
moc.delete(shot)
try? moc.save()
struct ShotList_Previews: PreviewProvider
static var previews: some View
ShotList()
【问题讨论】:
由于代码中有多种形式的“bean”,请您指出出错的代码行。 这是行:let shot = bean.shotArray[offset] 尝试将 bean 作为参数传递给 deleteShot 函数,这样您就可以这样调用它:self.deleteShot(bean: bean, at: indexSet)。使用这些参数相应地调整 deleteShot 函数定义,然后您应该在函数中包含所有必要的信息并且代码应该可以工作。 谢谢,以后试试。 还有一件事:将 .oneDelete(...) 更改为 .onDelete() indexSet in self.deleteShot(bean: bean, at: indexSet) 。祝你好运。 【参考方案1】:bean 只能在闭包中访问: ForEach(beans, id: .self) bean in
它在 func deleteShot 中不可用。
【讨论】:
以上是关于SwiftUI Core Data 删除实体的相关数据的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI从Core Data实体中获取总项目(SQL术语中的行)计数[重复]
如果从 Core Data SwiftUI 中删除,则删除本地通知