核心数据:Id已设置但保存时显示为nil

cgo*_*old 5 core-data swift

在 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)

但错误告诉我idparentRownil。其他属性如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被赋予同一个父母。