Objective c 使用NSCoding序列化对象图中的更改的好方法?

Objective c 使用NSCoding序列化对象图中的更改的好方法?,objective-c,nscoding,Objective C,Nscoding,我有一个支持NSCoding的对象图。我还有一个单独的类负责序列化本身,即它检测对象图中的更改,并使用NSKeyedArchiver将其保存到文件中 我对设计相当满意,但我不确定如何观察对象图中的变化。我想到的一个通用解决方案是为每个对象添加一个version属性,该属性随着每次更改而递增: - (void) setFoo: (id) newFoo { _foo = newFoo; self.version++; } 当图形中的一个对象引用其他对象时,它会观察其版本(使用KVO

我有一个支持
NSCoding
的对象图。我还有一个单独的类负责序列化本身,即它检测对象图中的更改,并使用
NSKeyedArchiver
将其保存到文件中

我对设计相当满意,但我不确定如何观察对象图中的变化。我想到的一个通用解决方案是为每个对象添加一个
version
属性,该属性随着每次更改而递增:

- (void) setFoo: (id) newFoo
{
    _foo = newFoo;
    self.version++;
}
当图形中的一个对象引用其他对象时,它会观察其
版本
(使用KVO),如果该对象发生更改,则该更改会向上传播。然后,序列化类观察根节点的
版本

这是可行的,但是管理所有KVO内容很麻烦,而且容易出错。你能想出更好的解决办法吗?另一个限制是,我希望对象尽可能少地了解序列化。他们应该知道如何序列化(通过实现
NSCoding
),但他们不应该关心更多


这一定是序列化框架中的一个常见问题,对吗?

此对象图本质上就是应用程序数据的模型吗?如果是这样,那么您可能需要查看撤消管理器。如果它有要撤消的内容,那么图形中的某些内容将发生更改。是的,它是模型的一部分。我从未使用过撤销管理器,我来看看。谢谢如果您从未使用过撤销管理器,则上述想法不太可能奏效。这是因为您需要使用撤消管理器(如何撤消)为模型的所有更改注册反向更改。由于您还没有做好这项工作,因此无法真正使用撤消管理器进行此检测。