以编程方式将 NSManagedObject
-subclass ( User
) 实例转换为其子类 ( AccountUser
) 实例的最佳方法是什么?
设置AccountUser
继承自 User
: NSManagedObject
当我第一次注册或登录应用程序时,我成为了 AccountUser
。然后,我下载我所有的 friend 并将它们存储为 User
对象。User
和 AccountUser
都有属性 firstName
、 lastName
等。 AccountUser
有一些额外的东西,比如 accessToken
。
问题
我的 friend 约翰登录我的设备。由于他是我的 friend ,他已经存储为 User
。但是现在,我想将他转换为 AccountUser
。以编程方式执行此操作的最佳方法是什么?我有很多属性和关系要保留,因此从 AccountUser
对象创建一个新的 User
对象,然后删除原始 User
对象有很多工作要做。如果我只是创建一个 AccountUser
而不删除 User
,事情就会变得一团糟。例如。当我通过 ID 获取 User
时,我得到两个对象:一个是 AccountUser
,另一个是 User
。
最佳答案
一种方法是简单地创建一个新的 AccountUser 对象并将相关字段从现有的 User 对象复制到其中。然后适本地处理旧的 User 对象——删除它,保存它,任何有意义的事情。给 AccountUser 一个带有 User 实例的初始化程序是有意义的,比如 -initWithUser:
。
另一个(可能更好)的选择是为所有用户使用一个类(用户)。如果要为某些用户(当前为 AccountUsers)存储其他信息,请创建一个新的 Account 类并将 Account 的实例与需要它的用户相关联。因此,代表您和您的 friend John 的 User 对象每个都有关联的 Account 对象,而所有其他用户则没有。当您的其他 friend 登录您的手机时,您可以为该人创建一个新的 Account 对象,并将其与他们现有的 User 对象相关联。
关于iphone - Core Data 将父类(super class)实例转换为子类实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8577561/