在 Xcode 11.4.1 中保存 Core Data 实体时,错误告诉我一个属性,nil即使我刚刚设置了它(并且打印显示了这一点)。我运行的代码是:
let res = Result(context: context)
res.completionTime = NSDate() as Date
res.value = value
res.id = UUID()
res.parentRow = self.row
print(res)
do {
try context.save()
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
是通过以下Result方式定义的:
extension Result {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Result> {
return NSFetchRequest<Result>(entityName: "Result")
}
@NSManaged public var completionTime: Date?
@NSManaged public var value: Int16
@NSManaged public var id: UUID?
@NSManaged public var parentRow: Row?
}
Run Code Online (Sandbox Code Playgroud)
在print声明中,我看到了这一点id并且parentRow已经确定。
<Result: 0x6000035aa710> (entity: Result; id: 0x60000166e4c0
<x-coredata:///Result/tDEBC3DA1-6A05-4150-9EB4-BFD4A79A94E52>;
data: {
completionTime = "2020-05-16 19:38:47 +0000";
id = "E557C8E4-A64F-4C83-9774-F2C2A19C1697";
parentRow = "0xa82f7a0d615a81bc
<x-coredata://F6AEF455-DF4A-4A39-9353-FF0AE5189A8D/Row/p35>";
value = 5;
})
Run Code Online (Sandbox Code Playgroud)
但错误告诉我id和parentRow是nil。其他属性如value已设置。这是什么原因造成的?
Error Domain=NSCocoaErrorDomain Code=1560 "Multiple validation errors occurred."
UserInfo={NSDetailedErrors=(
"Error Domain=NSCocoaErrorDomain Code=1570 \"id is a required value.\"
UserInfo={NSValidationErrorObject=<Result: 0x6000035a80a0> (entity: Result;
id: 0xa82f7a0d61d281be <x-coredata://F6AEF455-DF4A-4A39-9353-FF0AE5189A8D/Result/p1>;
data: {\n completionTime = \"2020-05-16 19:03:14 +0000\";\n
id = nil;\n
parentRow = nil;\n value = 5;\n}), NSValidationErrorKey=id,
NSLocalizedDescription=id is a required value.}",
"Error Domain=NSCocoaErrorDomain Code=1570 \"parentRow is a required value.
\" UserInfo={NSValidationErrorObject=<Result: 0x6000035a80a0> (entity: Result; id: 0xa82f7a0d61d281be <x-coredata://F6AEF455-DF4A-4A39-9353-FF0AE5189A8D/Result/p1>;
data: {\n
completionTime = \"2020-05-16 19:03:14 +0000\";\n
id = nil;\n
parentRow = nil;\n
value = 5;\n
}),
NSValidationErrorKey=parentRow,
NSLocalizedDescription=parentRow is a required value.}"
)}
Run Code Online (Sandbox Code Playgroud)
小智 0
我遇到了这个问题,然后我意识到我的反向关系之一是一对一,而它应该是一对多,删除规则设置为无效,所以当我设置第二个对象具有这种关系时,它可能假设先前的对象不再相关,并取消该关系。因此,与parentRow(例如Row实体中的“childRows”)的反向关系可能具有To One类型而不是To Many类型(在数据模型检查器中检查关系),并且只要其他行,parentRow就会被设置为nil被赋予同一个父母。
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |