我猜在这种情况下你不需要环境对象,因为 CoreData 信息可以直接使用,它也会更新你的视图。
首先需要在Environment中添加CoreData的persistenceControler:
@main
struct YourApp: App {
let persistenceController = PersistenceController.shared
@StateObject var otherEnvironmentStuff: OtherEnvironmentStuff = OtherEnvironmentStuff()
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
.environmentObject(otherEnvironmentStuff)
}
}
}
然后你可以直接在所有视图中使用CoreData,并添加数据,将直接在视图中使用:
struct MyView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
entity: EntityClassName.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \EntityClassName.name, ascending: false)],
predicate: NSPredicate(format: "someAttributeName == %@", NSNumber(value: false)),
animation: .default)
private var myEntities: FetchedResults<EntityClassName>
var body: some View {
Text("Do Whatever you want with the CoreData data...")
}
func addValue() {
let newEntity: EntityClassName = EntityClassName(context: viewContext)
newEntity.someAttributeName = someValueToSet
do {
try viewContext.save()
} catch {
print(error.localizedDescription)
}
}
}
如果您不需要谓词或排序描述符,只需删除它们即可。
如果您没有 PersistanceController,只需使用 CoreData 为 SwiftUI 创建一个新的 Xcode Porject,Xcode 将为您创建一个,您可以将其复制到您当前的项目中。