核心数据不保存一个实体的属性

Posted

技术标签:

【中文标题】核心数据不保存一个实体的属性【英文标题】:Core Data not saving attributes of one Entity 【发布时间】:2011-11-07 14:56:05 【问题描述】:

我目前在使用 Core Data 时遇到问题。我有两个实体 A 和 B。A 可以有多个 B,因此存在一对多的关系。 dataModel 和类都已正确定义并且正在工作。现在问题来了:

当我创建一个实体 A 和一些 B 实体并设置所有属性时,我能够存储和加载它们。当应用程序关闭并加载实体 A 时,所有属性都已正确设置,并且仍然具有所有 B 实体。问题是在 B 实体内部,所有属性都丢失并且没有保存。保存 ManagedObejctContext 时不会出现错误。

我不明白为什么在应用程序启动时获取所有 B,他们正在创建与属性值有关的工作,而从以前的启动中获取 B 会导致所有属性为空。

感谢您的想法

解决方案: 在构建了几个新实体并搜索了差异后,我发现 B 实体中的属性以某种方式使用 @synthesize 和 @dynamic 进行了初始化!那是问题来自

【问题讨论】:

您是否对两者使用相同的上下文? 您是否在创建实体后执行 save: 方法?你如何创建 B 对象? 这是相同的上下文。我正在使用 insertNewObjectForEntityForName 方法,就像我对 A 实体所做的那样 【参考方案1】:

检查以下内容:

在 DataModel 中,您的 2 个关系(A 有 B,B 属于 A)是否正确设置为反向? (AtoB是BtoA的逆)

您确定它们不属于几个不同的 managedObjetcContext 吗?

你确定你对 B 项所做的修改后面跟着 [self.managedObjectContext save] 吗?

【讨论】:

感谢您的回复,遗憾的是一切都很好。 我想我知道。而不是 insertNewObjectForEntityForName 方法,尝试使用 xcdatamodeld 创建的 addBObject:(B *)value 方法(检查数据模型创建的 A.h 文件中的正确名称)

以上是关于核心数据不保存一个实体的属性的主要内容,如果未能解决你的问题,请参考以下文章

核心数据实体布尔属性未保存在表格单元格删除中

核心数据 - 编辑、递增和保存属性到现有实体

向核心数据实体添加瞬态属性是不是需要新版本模型?

核心数据保存和加载到多个实体

核心数据 - 保存和检索属性 - 示例代码

核心数据可转换属性(NSArray)为空