使用用户信息条目记录核心数据实体属性

Posted

技术标签:

【中文标题】使用用户信息条目记录核心数据实体属性【英文标题】:Documenting Core Data entity attributes with User Info entries 【发布时间】:2012-03-05 10:27:18 【问题描述】:

我们正在寻找一种记录核心数据实体的方法。到目前为止,我想出的唯一真正的选择是:

    使用 UML 或其他一些标准进行外部文档 为每个实体创建 NSManagedObject 子类并使用代码 cmets 使用 User Info 字典创建包含字符串注释的键值对

选项 1 感觉像是太多额外的工作,而且几乎可以肯定 99% 的时间都会过时。

选项 2 感觉自然且比选项 1 更正确。这里最大的缺点是,如果使用 Xcode 重新生成此模型类,这些 cmets 可能会丢失。

选项 3 感觉不如选项 2 正确,但具有增加元数据提取自动化可能性的额外优势。例如,在我们的一个应用程序中,我们需要密切关注我们在设备本地存储的内容以及同步到 iCloud 的内容。使用用户信息字典可以很容易地自动创建某种形式的人工制品,可以在内部和外部(由客户)检查其合规性

所以我的问题是为此目的使用用户信息字典是否不合适?还有其他我缺少的选项吗?

【问题讨论】:

【参考方案1】:

选项 2 是我每次都使用的。如果您查看您的核心数据模型(something.xcdatamodeld 或 something.xcdatamodel),您会看到类似于下图的内容。

您可以将您的实体绑定到您想要的任何类,然后将 cmets 放在那里。如果您保持实体名称与您的类名称相同,这会有所帮助,以使您所做的事情一目了然。

此外,这还使您能够添加自动化。您可以通过创建自定义 getter 和 setter(访问器方法)以及自定义 description 方法来做到这一点。

【讨论】:

【参考方案2】:

我使用选项 2 和类别。我将让 XCode 生成 NSManagedObject 子类并在每个子类上使用一个类别。对于类别,我不会丢失在类别中所做的更改,可以记录、制作自定义 getter 和 setter,并且我仍然能够使用生成的子类。

【讨论】:

完全同意。您不应该手动更改 Xcode 生成的自动生成的代码,因为下一个处理您的代码的人不会知道您已经这样做了,并且会在他重新生成类时擦除您的所有 cmets。类别是一种巧妙的解决方法。【参考方案3】:

如果我们只谈论记录(即编写或多或少大量旨在供人类阅读的文本)您的课程,我会使用选项 2。

如果您担心 Xcode 在选项 2 中覆盖您的类的可能性,您可以考虑为每个实体创建两个类:一个由 Xcode 生成并且始终可以被替换(您通常不接触此文件)另一个从生成的继承而来,您可以在其中放置所有自定义项和 cmets。

mogenerator 提出了这种二分类方法。

尽管如果您需要将一些元数据与将要以编程方式处理的实体一起存储,那么 userInfo 非常适合这种情况。

【讨论】:

以上是关于使用用户信息条目记录核心数据实体属性的主要内容,如果未能解决你的问题,请参考以下文章

使用表格视图将两个属性的信息添加到单个核心数据实体中的有效方法

核心数据 - 单个实体的多个条目

如何获取核心数据属性中所有条目的总和?

另一种多线程核心数据使用

使用核心数据 iOS 的登录 ID 和密码

获取多个实体之间没有关系