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

ma1*_*w28 3 iphone core-data subclass superclass nsmanagedobject

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

建立

AccountUser继承自User:NSManagedObject

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

这两个UserAccountUser有属性firstName,lastName等等.AccountUser有一些额外的东西,比如accessToken.

问题

我的朋友约翰登录我的设备.因为他是我的朋友,所以他已经存放了User.但现在,我想把他变成一个AccountUser.以编程方式执行此操作的最佳方法是什么?我有很多属性和关系要保留,所以AccountUserUser对象创建一个新对象然后删除原始User对象是很多事情要做.如果我只创建一个AccountUser没有删除的User东西,事情会变得混乱.例如,当我User通过ID 获取时,我得到两个对象:一个是AccountUser,另一个是User.

Cal*_*leb 6

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

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