如何扩展核心数据实体 类

How to extend core data entity classes

我有一些使用 Xcode 生成的 NSManagedObject 的子classes。我为那些 classes 写了一些验证码 (validateForInsert:),但每次我更新数据模型并重新生成子 classes 时,所有这些验证码都会消失。有些人建议我使用类别来扩展这些 classes 而不是在其中编写代码,但根据苹果的文档,使用类别覆盖方法是一种非常糟糕的做法,并且可能导致未定义的行为。

我还尝试将生成的 class 子class 子。我生成了一个名为 DBEntityOne 的 class,它的子 class 名为 EntityOne。 EntityOne和EntityTwo是一对一的关系,用DBEntityTwo(generated)和EntityTwo表示。但是,每当我尝试获取与 EntityOne 实例关联的 EntityTwo 时,我得到的是 DBEntityTwo 而不是 EntityTwo

那我该怎么办?是不是应该放弃代码自动生成,自己写实体classes?

一些建议...

  1. 您可以使用类别 (Objective-C) 或扩展 (Swift) 扩展实体 classes。尽管有 Apple 的警告,但这通常是安全的。至少,我已经使用实体 classes 的扩展没有问题。

  2. 生成 classes 后,很容易为新实体字段手动添加属性。您不需要重新生成 class 文件来获得那一点代码。

  3. 如果您使用的是源代码控制系统,您可以重新生成 classes,然后将重新生成的 classes 与版本化的 classes 合并。这很容易让您保留自定义代码,同时从生成的代码中获益。