SwiftUI CoreData未保存/未检测到更改



我有一个名为Cart的实体,但我似乎无法用它来保存视图模型中的新数据。

Persistence.swift

struct PersistenceController {
static let shared = PersistenceController()
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
for _ in 0..<10 {
let newItem = Item(context: viewContext)
newItem.timestamp = Date()
}
for _ in 0..<10 {
let newCart = Cart(context: viewContext)
newCart.menuName = "name"
newCart.menuImg = "img"
newCart.menuCode = "code"
}
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error (nsError), (nsError.userInfo)")
}
return result
}()
let container: NSPersistentContainer
init(inMemory: Bool = false) {
container = NSPersistentContainer(name: "Project")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
}
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error (error), (error.userInfo)")
}
})
}

func save() {
let context = container.viewContext
if context.hasChanges {
print("Found Changes")
do {
try context.save()
} catch {
print("ERROR")
let nserror = error as NSError
fatalError("Unresolved error (nserror), (nserror.userInfo)")
}
} else {
print("NO Changes")
}
}
}

菜单视图Model.swift

class MenuViewModel.swift: ObservableObject, MenuDetailService {
@Environment(.managedObjectContext) var managedObjectContext
func addToCart() {
let newCart = Cart(context: managedObjectContext)
newCart.menuCode = menuCode
newCart.menuName = menuName
newCart.menuImg = menuImg
PersistenceController.shared.save()
}
}

ProjectApp.swift

@main
struct ProjectApp: App {
@Environment(.scenePhase) var scenePhase
let persistenceController = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(.managedObjectContext, persistenceController.container.viewContext)
}.onChange(of: scenePhase) { _ in
persistenceController.save()
}
}
}

持久性控制器func save((总是不打印任何更改,似乎我使用了不同的上下文?我不知道如何使用持久性控制器中的上下文来保存新数据。我该怎么做?非常感谢。

//Remove the `.swift` 
class MenuViewModel: ObservableObject, MenuDetailService {
//@Environment does not work well outside of a struct :View . Updates are unreliable
var managedObjectContext = PersistenceController.shared.container.viewContext
// You need to pass the variables somehow to the new object when you call the method from the `View`
func addToCart(menuCode: String, menuName: String, menuImg: UIImage) {
let newCart = Cart(context: managedObjectContext)
newCart.menuCode = menuCode
newCart.menuName = menuName
newCart.menuImg = menuImg
PersistenceController.shared.save()
}
}

最新更新