我有一个基类@interface BaseMailbox : NSManagedObject
,我有两个孩子。
似乎可以通过下一种方式创建我的类的对象:
BaseMailbox *mailbox;
mailbox = [NSEntityDescription
insertNewObjectForEntityForName:@"BaseMailbox"
inManagedObjectContext:context];
所以看起来Core Data对象不支持多态?
修改
在创建我的邮箱对象之前,例如我使用了:
account = [[GoogleMailbox alloc]
initWithFullName
当我打电话给account.connect
时 - 这是与gmail params的连接。
但是现在account
没有引用任何子对象,当我调用account.connect
时 - 它会调用基类方法。
EDIT2
BEFORE CORE DATA:
if([_emailAddress.text endsWith:SUFFIX_GOOGLE]){
account = [[GoogleMailbox alloc]
initWithFullName:_fullName.text emailAddress:_emailAddress.text password:_password.text];
}else if([_emailAddress.text endsWith:SUFFIX_YAHOO]){
account = [[YahooMailbox alloc]
initWithFullName:_fullName.text emailAddress:_emailAddress.text password:_password.text];
}else{
..........
BOOL success = [account connect]; // GoogleMailbox or YahooMailbox or ...,depending the account refers to.
核心数据:
BaseMailbox* account = [NSEntityDescription
insertNewObjectForEntityForName:@"MailBox"
inManagedObjectContext:context];
}else{
..........
BOOL success = [account connect]; // BaseMailbox
答案 0 :(得分:3)
核心数据实体支持继承概念。
实体“A”可以定义为另一个实体“B”的“父实体”
数据模型检查员。这反映在相应的托管对象子类中:
B
是A
的子类。
所以你可以定义一个实体“BaseMailbox”并将其作为父实体 “GoogleMailbox”和“YahooMailbox”。所有子类共有的属性是 在父实体中定义。
然后
[NSEntityDescription insertNewObjectForEntityForName:@"GoogleMailbox"
inManagedObjectContext:context]
返回GoogleMailbox
对象,该对象是BaseMailBox
的子类。