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

How do I set up my Core Data model when my objects have arbitrary property data?

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

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

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

问题是,鉴于 authSettings 可以存储多种对象类型之一,我如何为我的用户创建核心数据模型?

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

的关系

一种听起来可以满足您需求的更简单的方法是使您的各种身份验证 class 符合 NSCoding,然后将它们存储在一个 "transformable" 中(不是字符串)用户实体上的字段。然后,Core Data 会自动转换身份验证对象 to/from NSData