SwiftUI CoreData 如何删除行并保存上下文

时间:2021-05-18 07:12:54

标签: swift core-data swiftui

我试图从我的 CoreData 实体中删除一行,但它总是返回此错误,我做错了什么?

错误日志

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray'

CartViewModel.swift

class CartViewModel {
    var managedObjectContext = PersistenceController.shared.container.viewContext

    @FetchRequest(
        entity: Cart.entity(),
        sortDescriptors: [
            NSSortDescriptor(keyPath: \Cart.menuName, ascending: true)
        ]
    ) var cartItems: FetchedResults<Cart>

    func deleteItem(at index: Int) {
        print(index)
        let cart = cartItems[index]
        managedObjectContext2.delete(cart)
        PersistenceController.shared.save()
    }

    func addToCart(menuCode: String, menuName: String, menuImg: String) {
        let newCart = Cart(context: managedObjectContext)
        newCart.menuCode = menuCode
        newCart.menuName = menuName
        newCart.menuImg = menuImg
        
        PersistenceController.shared.save()
        
        print(newCart)
    }
}

Persistence.swift

struct PersistenceController {
    static let shared = PersistenceController()

    /*** Default code from new project ***/

    func save() {
        let context = container.viewContext

        if context.hasChanges {
            print("CHANGE")
            do {
                try context.save()
            } catch {
                // Show some error here
                print("ERROR")
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        } else {
            print("NO CHANGES")
        }
    }
}

函数 addToCart 完美运行,将新项目添加到 Entity 中,但删除一行总是返回错误。我错过了什么?提前致谢。

0 个答案:

没有答案