0

我有一个基类@interface BaseMailbox : NSManagedObject,我有两个孩子。似乎只能通过以下方式创建我的类的对象:

BaseMailbox *mailbox;
mailbox = [NSEntityDescription
                                           insertNewObjectForEntityForName:@"BaseMailbox"
                                           inManagedObjectContext:context];

所以看起来 Core Data 对象不支持多态性?

编辑:

例如,在创建我的邮箱对象之前,我使用了:

 account = [[GoogleMailbox alloc]
                   initWithFullName

当我打电话时account.connect- 这是与 gmail 参数的连接。

但现在account没有引用任何子对象,当我调用时account.connect- 它调用基类方法。

编辑2

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
4

1 回答 1

3

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

因此,您可以定义一个实体“BaseMailbox”并将其设为“GoogleMailbox”和“YahooMailbox”的父实体。所有子类共有的属性在父实体中定义。

在此处输入图像描述

然后

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

返回一个GoogleMailbox对象,它是 的子类BaseMailBox

于 2013-08-17T12:32:19.157 回答