Ios 回滚不适用于可转换的核心日期实体

Ios 回滚不适用于可转换的核心日期实体,ios,core-data,Ios,Core Data,我有一个应用程序,它将数据存储在核心数据管理对象中。这些对象包含多个属性—信息为NSString,布尔值为NSNumber,数据数组为Transformable 数据点.h: @property (nonatomic, retain) id dataArray; @property (nonatomic, retain) NSString * note; @property (nonatomic, retain) NSNumber * bool; dataPoint.m: @dynamic d

我有一个应用程序,它将数据存储在核心数据管理对象中。这些对象包含多个属性—信息为NSString,布尔值为NSNumber,数据数组为Transformable

数据点.h:

@property (nonatomic, retain) id dataArray;
@property (nonatomic, retain) NSString * note;
@property (nonatomic, retain) NSNumber * bool;
dataPoint.m:

@dynamic dataArray;
@dynamic note;
@dynamic bool;
应用程序用户可以进行更改并存储或取消这些更改。要撤消所有更改,我调用[managedObjectContest rollback]方法。我还没有另外安排一个经理。 对于简单的数据类型(如NSString或NSNumber),这很好。调用回滚后,所有条目都处于上次保存状态。但这似乎不适用于存储阵列。在调用rollback之后,我仍然只获取更改的值。只有在重新启动应用程序后,才会显示原始(上次保存的)数据

我必须做什么才能使回滚对复杂数据起作用


谢谢你和亲切的问候

您只需在回滚后重新获取实体即可。这样,来自持久存储的数据(可能是正确的数据)将替换更改的数组

另一种方法是只保留旧阵列的副本,并在显示数据时使用它,如果这是可行的(可能不会跨多个视图控制器)

将数组作为属性是在NSManagedObject中存储内容的一种相当非标准的方式。出现这种现象的原因是,一旦检索到数组,实际上就会得到一个指向它的指针。更改数组,但指针保持不变。在回滚期间,不需要更改任何内容,所以核心数据什么也不做。内存中的阵列与核心数据无关


如果您不厌其烦地在核心数据中对阵列中的内容进行建模,效果会更好。除了具有更可靠的数据结构外,它还可能产生更明确、可读性更强、可维护性更强的代码。

回滚后是否尝试重新获取相关实体?谢谢您的回答。我已经尝试在回滚后重新获取实体,但即使这种方法似乎也不起作用-我仍然可以获取更改后的数组。因此,您应该按照我在上一段中的建议执行。我更改了数据模型(不再使用可转换对象),现在它工作正常。如果有人找到其他解决方案,请随时发布。这将是非常有趣的。看到这是你向SOF->提出的第一个问题,别忘了勾选上面的复选标记。