核心数据NSManagedObject就像一个基类

时间:2013-08-17 11:44:40

标签: ios core-data

我有一个基类@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

1 个答案:

答案 0 :(得分:3)

核心数据实体支持继承概念。 实体“A”可以定义为另一个实体“B”的“父实体” 数据模型检查员。这反映在相应的托管对象子类中: BA的子类。

所以你可以定义一个实体“BaseMailbox”并将其作为父实体 “GoogleMailbox”和“YahooMailbox”。所有子类共有的属性是 在父实体中定义。

enter image description here

然后

[NSEntityDescription insertNewObjectForEntityForName:@"GoogleMailbox"
                                  inManagedObjectContext:context]

返回GoogleMailbox对象,该对象是BaseMailBox的子类。