如何为使用数据模型创建的核心数据类添加属性?

Posted

技术标签:

【中文标题】如何为使用数据模型创建的核心数据类添加属性?【英文标题】:How to add attributes to a core data class created with the data model? 【发布时间】:2014-11-15 13:12:00 【问题描述】:

我正在创建一个待办事项应用程序:

我在我的项目 .datamodel 文件中创建了一个实体,我为该实体添加了一个名为“content”的字符串的属性,并使用“editor”创建了 NSManagedObject 子类 >“创建 NSManagedObject 子类:

创建了这个类:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>


@interface Targets : NSManagedObject

@property (nonatomic, retain) NSString * content;

@end

但现在我想要另一个“id”属性,我可以给每个待办事项一个 id... 我该怎么做?可以手动完成吗?因为我是从实体模型生成的,所以感觉就像我需要创建一个新实体来做到这一点......?

如果你能指导我,也许通过解释它是如何工作的,那就太棒了..也许我在这里不明白,这就是我问这个问题的原因

【问题讨论】:

你想给这个实体添加属性吗? 鉴于替换文件可能存在 Xcode 错误,您可以从项目中删除该文件并让 Xcode 生成一个新文件。 为每个实体生成两个类总是明智的:一个用于您不接触并且可以重新创建的机器,一个用于人类,它将包含您的更改和方法并且不会被覆盖. rentzsch.github.io/mogenerator 【参考方案1】:

鉴于 Xcode 似乎存在一个错误,导致它无法正确替换您的 CoreData 文件,我已经用解决方法重写了我的答案。

    删除原来生成的class文件:

(点击移动到垃圾箱。)

    添加属性:

    按照您生成我们在步骤 1 中删除的原始文件的确切方式生成该类:

【讨论】:

【参考方案2】:

所以,你的问题的解决方法其实很简单:

要将另一个属性添加到您的实体,您可以使用与使用content 属性完全相同的方式来处理它。只需在图形编辑器中添加属性,就像您之前使用 content 所做的那样,然后再次使用 Xcode 的内置功能生成类,就像您之前所做的那样。

Xcode 会覆盖以前生成的文件,并用现在具有属性的新版本替换它们。随心所欲地执行该过程并没有什么坏处。 :)

编辑: 简短的说明,您需要记住在更改数据模型后从您的设备(或模拟器)中删除应用程序,否则应用程序将崩溃,因为您的新核心数据模型与你以前用过的那个。 其次,如果你想为你的数据模型类添加功能(无论如何你应该非常小心,但可能是一些实用的 Core Data 函数等等......),你应该使用 ios 类别,这样当您重新生成模型类时,您为此编写的代码不会被删除。关于 iOS 开发的斯坦福讲座有一个关于 Core Data 的great introduction session,其中详细解释了这种方法!

【讨论】:

我支持你的答案,甚至发布了我自己的答案,概述了这些步骤......但是当我真正这样做时,我应该覆盖的文件似乎没有改变。 我加入评论 :) ,看起来后台发生了一些事情,但我的新属性没有添加到“目标”类中..@nburk hmmm...这真的很奇怪,我在几个项目中使用过Core Data,并且通常按照我描述的方式处理它,并且它总是可以正常工作...但是,我只是自己尝试过事实上,Xcode 似乎不再正确地覆盖文件(实际上我之前没有在 Xcode 6 上尝试过......)。这是 Xcode 中的错误吗? 必须。甚至 Xcode 都说它会替换文件,但实际上并没有这样做。 它确实有效,是的。我只是将其添加为对问题的评论。

以上是关于如何为使用数据模型创建的核心数据类添加属性?的主要内容,如果未能解决你的问题,请参考以下文章

Yii2:如何为模型类动态添加验证规则?

如何为对象计数多个关系创建谓词?核心数据 iOS Swift

[iPhone]你将如何为下面给出的结构设计核心数据对象模型

如何为 Django 模型定义默认数据?

涉及新实体和一对多关系的核心数据迁移

您如何为 DSpace 创建一个新的、可搜索的元数据模式?