Objective c 如何使所有核心数据对象继承自类而不是NSManagedObject?

Objective c 如何使所有核心数据对象继承自类而不是NSManagedObject?,objective-c,inheritance,core-data,Objective C,Inheritance,Core Data,我创建了我自己的类,希望核心数据使用它,而不是NSManagedObject: @interface MyManagedObject: NSManagedObject { id delegate; } 我不能使用类别,因为它声明了一个ivar。我所有的核心数据对象都使用具体的类,而不是NSManagedObject的实例。我使用代码生成器生成这些文件。下面是一个联系人对象的示例: @interface Contact: NSManagedObject { } 我知道我可以在生成的代码中将

我创建了我自己的类,希望核心数据使用它,而不是
NSManagedObject

@interface MyManagedObject: NSManagedObject {
  id delegate;
}
我不能使用类别,因为它声明了一个ivar。我所有的核心数据对象都使用具体的类,而不是
NSManagedObject
的实例。我使用代码生成器生成这些文件。下面是一个
联系人
对象的示例:

@interface Contact: NSManagedObject {
}
我知道我可以在生成的代码中将
NSManagedObject
手动更改为
MyManagedObject
,但每次重新生成代码时我都需要这样做。有没有办法让它自动使用我自己的类

此外,任何解决方案中的导入都可能是一个问题。理想情况下,我希望它使用
@class MyManagedObject
而不是
#导入“MyManagedObject.h”
,因为
MyManagedObject.h
位于库中,并且头需要文件夹前缀才能访问(例如
#导入“MyLib/MyManagedObject.h”


我尝试在
.xcdatamodel
文件中创建一个同名的虚拟对象,并指定所有对象都从中继承,但存在两个问题。第一个是它正在使用
#import“MyManagedObject.h”
,由于我上面指定的原因,它找不到它。第二个问题是,我不确定愚弄核心数据使其认为类是从另一个核心数据对象继承的是不是一个好主意。。。即使我没有生成代码文件。我猜核心数据可能在幕后做了一些不必要的事情,因为它认为我的类继承自一个额外的类

我想我可以用另一层类来解决第一个问题。例如,我将指定对象继承自
MyProjectManagedObject
,并在我的项目中创建
MyProjectManagedObject.h
文件:

#import "MyLib/MyManagedObject.h"

@interface MyProjectManagedObject: MyManagedObject {
}
。。。现在,我自动生成的文件将如下所示:

#import "MyProjectManagedObject.h"

@interface Contact: MyProjectManagedObject {
}

。。。这会管用的。唯一的问题是我上面提到的第二个问题,关于在核心数据中后台运行的额外代码。这是值得担心的还是我应该忽略它?是否有其他方法可以解决上述两个问题?

如果使用SQL后端,请不要在数据模型中使用继承。由于SQL后端的实现,它的性能和空间特性非常糟糕。(这是苹果的建议。)


我可能错了(我会仔细检查),但我认为您可以只使用类和头文件来做您想做的事情,而不会弄乱数据模型。(这是假设您不想实际将ivar存储在数据后端中。)只需像您那样实现
MyManagedObject
,并使您的子类固有于
MyManagedObject
,而不是
NSManagedObject
(例如
联系人:MyManagedObject
)。请注意,您只需在头文件中执行此操作,而不必在实际的数据模型中执行。编译器应该解决剩下的问题

看看MOGenerator。它至少有助于重新生成托管对象类文件:它为每个对象类文件生成两个文件。一个是您编辑的,另一个是自动生成的。当你重新生成后者时,前者是不变的


你有苹果推荐的链接吗?此外,ivar不需要位于后端。这正是我最初做的,我修改了
.h
文件,使其从正确的类继承。每次重新生成.h文件时(即每次更改模型时)都必须这样做,这真是令人讨厌。这就是我寻找其他解决方案的原因。建议出现在“使用核心数据”开发人员视频()中。如果使用
--base MyManagedObject
命令行参数,这一点很有效。