Core data NSCoder-仅在对象实例化时调用

Core data NSCoder-仅在对象实例化时调用,core-data,nscoding,Core Data,Nscoding,我已经建立了一个符合NSCoding的类,并且在我第一次创建对象时按照预期工作。它的设置基本上与 我遇到的问题是,对象的属性在更改时不会保留 比如说, Foo已创建,并具有名为name的属性 Foo.name = @"bar" 我可以对对象进行编码/解码,它保留了名称栏 如果我尝试改变 Foo.name = @"newName" 不会再次调用encode方法,因此foo.name仍为@“bar” (我在encode方法中有一个日志状态) 而且 我使用的是一个核心数据对象,它有一个指向foo对

我已经建立了一个符合NSCoding的类,并且在我第一次创建对象时按照预期工作。它的设置基本上与

我遇到的问题是,对象的属性在更改时不会保留

比如说,

Foo已创建,并具有名为name的属性

Foo.name = @"bar"
我可以对对象进行编码/解码,它保留了名称栏

如果我尝试改变

Foo.name = @"newName"
不会再次调用encode方法,因此foo.name仍为@“bar” (我在encode方法中有一个日志状态)

而且

我使用的是一个核心数据对象,它有一个指向foo对象的可转换属性

感谢

要“保存”对象,您必须调用encode方法,例如将其写入磁盘或发送到输出流

但是,由于使用核心数据来持久化对象,因此必须调用

[managedObjectContext save:&error];
在更改对象后保留该对象


话虽如此,我认为拥有一个指向保留字符串属性的自定义类的可转换属性没有多大意义。相反,您应该考虑一种更合适的数据结构,这样您只需要非标准数据类型的可转换属性,而这些非标准数据类型无法通过使用已内置到核心数据中的标准数据类型来持久化。

谢谢,我应该补充一点,我正在保存MOC,但它仍然没有保存可转换的obj。之所以这样做,主要是因为我想尝试遵循开闭原则。例如,我有一个新的自定义类,不需要不断更改核心数据模型。您是否尝试调用
archiveRootObject:
来调用编码器例程?不确定如何调用该方法,因为对象的位置只是来自核心数据对象的引用。。。。我想我所要做的是比它所值得的更多的麻烦。谢谢你的帮助。我同意。根据最后一段,你可以接受这个答案。