当我的对象具有任意属性数据时,如何设置我的Core Data模型?

时间:2016-07-12 19:25:09

标签: objective-c database core-data data-modeling foundation

我正在努力弄清楚如何构建核心数据模型以支持我在我的应用程序中创建的类结构。

我的应用有用户,我允许这些用户使用多种不同的身份验证方法登录应用。每种身份验证方法都需要略有不同的凭据和信用类我选择通过创建一个抽象的AuthenticationSettings基类来解决这个问题,然后用FacebookAuthenticationSettingsTwitterAuthenticationSettingsMyWebsiteAuthenticationSettings等继承它。

我的User类有一个属性authSettings(类型为AuthenticationSettings),用于存储其中一个设置类的实例。用户每个用户只允许使用一种身份验证方法,因此效果很好。

问题是,如果authSettings可以将多种对象类型中的一种存储到其中,我如何为我的用户创建核心数据模型?

  • 我是否为每种类型的身份验证创建单独的实体,然后在这些实体和用户实体之间创建关系?这很奇怪,因为数据模型不会对用户强制执行1:1 auth方法。在获取用户时,我还必须获取相应的身份验证方法。

  • 我是否只创建自己的auth creds序列化编码并将其插入用户实体的字符串字段中?这迫使我发明一些编码,如果任何未来的auth方法使用难以序列化为字符串的字段,感觉特别麻烦。

  • 有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

一种方法是设置与您的类层次结构平行的Core Data实体层次结构。在Core Data中创建一个名为AuthenticationSettings的抽象实体,并为每种身份验证类型创建一系列子实体。与User类属性一样,创建与AuthenticationSettings的关系。

听起来更符合您需求的更简单的方法是使您的各种身份验证类符合NSCoding,然后将它们存储在用户实体的单个“可转换”(非字符串)字段中。然后,核心数据会自动将身份验证对象转换为NSData