0

私には基本クラスが@interface BaseMailbox : NSManagedObjectあり、その 2 人の子供がいます。次の方法でのみ、クラスのオブジェクトを作成できるようです。

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
4

1 に答える 1

3

Core Data エンティティは、継承の概念をサポートしています。エンティティ「A」は、Data Model Inspector で別のエンティティ「B」の「親エンティティ」として定義できます。これは、対応する管理対象オブジェクトのサブクラスに反映されています。 Bは のサブクラスですA

したがって、エンティティ「BaseMailbox」を定義し、それを「GoogleMailbox」と「YahooMailbox」の親エンティティにすることができます。すべてのサブクラスに共通の属性は、親エンティティで定義されます。

ここに画像の説明を入力

それで

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

GoogleMailboxのサブクラスであるオブジェクトを返しますBaseMailBox

于 2013-08-17T12:32:19.157 に答える