Core Data将超类实例转换为子类实例?

时间:2011-12-20 15:13:31

标签: iphone core-data subclass nsmanagedobject superclass

以编程方式将NSManagedObject - 子类(User)实例转换为其子类(AccountUser)实例的最佳方法是什么?

设置

AccountUser继承自UserNSManagedObject

当我第一次注册或登录应用时,我变成了AccountUser。然后,我下载所有朋友并将其存储为User个对象。

User& AccountUser具有firstNamelastName等属性。AccountUser还有一些额外的内容,例如accessToken

问题

我的朋友John登录我的设备。由于他是我的朋友,他已经存储为User。但是现在,我想把他变成AccountUser。以编程方式执行此操作的最佳方法是什么?我有很多属性和关系要保留,因此从AccountUser对象创建一个新的User对象,然后删除原始的User对象是很多事情。如果我只是在不删除AccountUser的情况下创建User,那么事情会变得混乱。例如。当我按ID获取User时,我会收到两个对象:一个是AccountUser,另一个是User

2 个答案:

答案 0 :(得分:6)

一种方法是简单地创建一个新的AccountUser对象,并将现有User对象中的相关字段复制到其中。然后适当地处理旧的User对象 - 删除它,保存它,无论什么都有意义。为AccountUser提供一个带有User实例的初始化程序是有意义的,例如-initWithUser:

另一个(可能更好)选项将涉及为所有用户使用单个类(User)。如果要为某些用户(当前是AccountUsers)存储其他信息,请创建一个新的Account类,并将Account的实例与需要它的用户相关联。因此,代表您和您的朋友John的User对象将各自具有关联的Account对象,而所有其他用户则不会。当您的其他朋友登录到您的手机时,您可以为该人创建一个新的帐户对象,并将其与现有的用户对象关联。

答案 1 :(得分:0)

也许你可以这样做

  1. 为User实体添加一个名为“is_account_user”的布尔属性。
  2. 在用户和帐户用户之间设置关系。
  3. 如果用户拥有帐户用户,请创建AcountUser实体并将其与用户关联。
  4. 如果用户没有帐户信息,则“is_account_user”将为NO;

    当您获取用户时,您可以检查is_account_user是否为YES,如果是,您可以获得他的AcountUser关系。

    希望有所帮助

相关问题