我有一个基类 @interface BaseMailbox : NSManagedObject
我有它的两个 child 。
似乎只能通过下一种方式创建我的类的对象:
BaseMailbox *mailbox;
mailbox = [NSEntityDescription
insertNewObjectForEntityForName:@"BaseMailbox"
inManagedObjectContext:context];
所以看起来 Core Data 对象不支持多态性?
编辑:
例如,在创建我的邮箱对象之前,我使用了:
account = [[GoogleMailbox alloc]
initWithFullName
当我调用 account.connect
- 它是与 gmail 参数的连接。
但现在 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
最佳答案
核心数据实体支持继承概念。
实体“A”可以定义为另一个实体“B”的“父实体”
数据模型检查器。这反射(reflect)在相应的托管对象子类中:
B
是 A
的子类。
所以你可以定义一个实体“BaseMailbox”并使它成为 “GoogleMailbox”和“YahooMailbox”。所有子类共有的属性是 在父实体中定义。
然后
[NSEntityDescription insertNewObjectForEntityForName:@"GoogleMailbox"
inManagedObjectContext:context]
返回一个 GoogleMailbox
对象,它是 BaseMailBox
的子类。
关于ios - 核心数据 NSManagedObject 就像一个基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288427/