首页 > 解决方案 > 我收到 1570 Cocoa 错误,因为与父实体的关系 var 结果为零 Core Data swift

问题描述

我正在尝试保存到CoreData新记录,但是当我尝试时,我得到了一个1570 Cocoa error. 在错误中,我看到 nil 的唯一内容user是与父实体的关系user var以及在属性检查器中设置为可选的其他两个属性,因此它们不是必需的。我不明白这一点,因为我确实执行了用户获取并检查活动登录是否与获取的用户名相同,并且该值是否正确..也许从错误打印中我没有看到一些东西。

这是功能:

static func saveBooking(bookingId: String, bookingDate: String, bookingStart: String, bookingEnd: String, customerName: String, price: String, workList: String) throws {
        let context = CoreData.databaseContext

        let request: NSFetchRequest<User> = User.fetchRequest()
        do {
            let fetch = try context.fetch(request)
            print("@@@@@@@@@@@@@@@@@@       fetching user")
            for value in fetch {
                if value.name == UserDetails.fullName {
                    print("User is: \(value.name!)")  //correct

                    if #available(iOS 10.0, *) {
                        let booking = Booking(context: context)
                        booking.user?.name = value.name! // results nil and causes error when saving
                        booking.bookingId = bookingId
                        booking.bookingDate = bookingDate
                        booking.bookingStart = bookingStart
                        booking.bookingEnd = bookingEnd
                        booking.customerName = customerName
                        booking.bookingPrice = price
                        booking.worksList = workList

                        do {
                            try context.save()
                            print("@@@@@@@@@@@@    New booking is saved")
                        } catch  {
                            print("@@@@@@@@@@@@@@    Error saving new booking")
                            print(error)
                        }


                    } else {
                        // Fallback on earlier versions
                        let entityDescription = NSEntityDescription.entity(forEntityName: "Booking", in: context)
                        let booking = Booking(entity: entityDescription!, insertInto: context)
                        booking.user?.name = value.name
                         booking.bookingId = bookingId
                        booking.bookingDate = bookingDate
                        booking.bookingStart = bookingStart
                        booking.bookingEnd = bookingEnd
                        booking.customerName = customerName
                        booking.bookingPrice = price
                        booking.worksList = workList
                        do {
                            try context.save()
                            print("@@@@@@@@@@@@    New booking is saved")
                        } catch  {
                            print("@@@@@@@@@@@@@@    Error saving new booking")
                            print(error)
                        }
                    }
                }
            }
        } catch  {
            print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      Error in fetching a user")
        }
    }

这是错误的打印:

@@@@@@@@@@@@@@    Error saving new booking
Error Domain=NSCocoaErrorDomain Code=1560 "(null)" UserInfo={NSDetailedErrors=(
    "Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo={NSValidationErrorObject=<Booking: 0x6000006240f0> (entity: Booking; id: 0x600002501860 <x-coredata:///Booking/t0A133AFE-B419-4941-AADC-6C9AE234A8EF2> ; data: {\n    bookingDate = 20190405;\n    bookingEnd = \"15:30\";\n    bookingId = 201904051430;\n    bookingPrice = \"45.0\";\n    bookingStart = \"14:30\";\n    customerName = \"vincenzo calia\";\n    shopLogoUrl = nil;\n    shopName = nil;\n    user = nil;\n    worksList = \"Revisione Generale, \";\n}), NSValidationErrorKey=user, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.)}",
    "Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo={NSValidationErrorObject=<Booking: 0x600000630190> (entity: Booking; id: 0x60000251b120 <x-coredata:///Booking/t0A133AFE-B419-4941-AADC-6C9AE234A8EF3> ; data: {\n    bookingDate = 20190405;\n    bookingEnd = \"18:30\";\n    bookingId = 201904051730;\n    bookingPrice = \"45.0\";\n    bookingStart = \"17:30\";\n    customerName = \"vincenzo calia\";\n    shopLogoUrl = nil;\n    shopName = nil;\n    user = nil;\n    worksList = \"Revisione Generale, \";\n}), NSValidationErrorKey=user, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.)}"
)}

你能发现问题出在哪里吗?像往常一样非常感谢

标签: iosswiftcore-data

解决方案


在保存上下文之前,我错过了将新条目添加到实体的父级,并且显然抛出了一个错误,所以我只是添加了该行value.addToBookings(booking),它一切都按预期工作。我实际上可以完全避免为父关系赋予价值,因为我实际上是通过父函数直接添加的。希望这会帮助其他人。


推荐阅读