ios - 我收到 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.)}"
)}
你能发现问题出在哪里吗?像往常一样非常感谢
解决方案
在保存上下文之前,我错过了将新条目添加到实体的父级,并且显然抛出了一个错误,所以我只是添加了该行value.addToBookings(booking)
,它一切都按预期工作。我实际上可以完全避免为父关系赋予价值,因为我实际上是通过父函数直接添加的。希望这会帮助其他人。
推荐阅读
- node.js - 如何串行(非并行)运行 ChromeDriver 请求?
- json - 尝试动态创建 UI/Image 元素并不断更新它们
- python-3.x - 解析有序字典python
- json - SQL Server 2012 中的字符编码问题
- javascript - Javascript 代码未在 Chrome 控制台上执行
- rust - 有没有办法声明一个接受实现 FromStr 的类型作为错误的结果?
- javascript - 为对象数组反应输入 setState
- javascript - 无法获取 req.userData.role 的值
- python - Gimp 程序中的 OpenCV Python 脚本 - 草/硬表面边缘检测
- java - 我需要 java(eclipse) 中的椭圆 ROI 而不是二次 ROI