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

Posted

技术标签:

【中文标题】核心数据:ID 已设置,但保存时显示为 nil【英文标题】:Core Data: Id is set but showing up as nil when saving 【发布时间】:2020-05-16 19:42:51 【问题描述】:

在 Xcode 11.4.1 中保存核心数据实体时,错误告诉我一个属性是 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)

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?


print 语句中,我看到idparentRow 已设置。

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

但是错误告诉我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."
)

【问题讨论】:

【参考方案1】:

我遇到了这个问题,然后我意识到我的反向关系之一是一对一,而它应该是一对多,删除规则设置为 Nullify,所以当我将第二个对象设置为具有该关系时,它可能假定先前的对象不再相关,并取消了该关系。因此,也许与 parentRow 的反向关系(例如,您的 Row 实体中的“childRows”)的类型为 To One 而不是 To Many(在数据模型检查器中检查关系)并且 parentRow 被设置为 nil 每当其他一些行被赋予相同的父级。

【讨论】:

以上是关于核心数据:ID 已设置,但保存时显示为 nil的主要内容,如果未能解决你的问题,请参考以下文章

虽然我已将我的 Visual Studio 安装程序的语言更改为韩语,但卸载程序在卸载启动时显示为英文

HTML 表单 POST 数据在提交时显示为空白

RestKit 映射结果已填充,但未设置核心数据实体

由于数据库的列保存数据为null,前端查询时显示为undefined

如何从字段表返回数据 api(fractal) 已设置默认值?

表格查询,当按 asc 排序时显示为空