Xcode 7 中的 CoreData 类

Posted

技术标签:

【中文标题】Xcode 7 中的 CoreData 类【英文标题】:CoreData classes in Xcode 7 【发布时间】:2015-11-10 14:39:12 【问题描述】:

我有一个来自 XCode 7 coredata 的查询。假设我正在创建 NSManagedObject 的子类(命名为“NoteEntity”),现在我有两个由 Xcode 生成的类,分别命名为“NoteEntity+CoreDataProperties.swift”和“NoteEntity.swift”。我知道第一个是目标 c 中的类扩展。

我的问题是,为什么 Xcode 会生成两个类?我们可以通过什么方式使用这两个类来提高生产力?

【问题讨论】:

似乎每次更新数据模型时都会更改 CoreDataProperties(例如添加新属性)。模型文件未更改,因此您可以在其中添加自己的逻辑、功能... 请注意,同样的事情也在 Objective-c 中发生:它不是 swift 特有的。 这是一个从 mogenerator '复制'的功能 【参考方案1】:

生成了两个类,但如果您稍后更改模型,只会重新生成一个(NoteEntity+CoreDataProperties.swift)。

多亏了这个新功能,您将能够在 NoteEntity.swift 类上添加一些方法甚至属性。而且它们不会被您的新一代模型抹去!

在该功能之前,我们必须创建自己的类别才能做到这一点。

这也比之前考虑这个更好: 你有两个班级; Message 和 Comment(它是 Message 的子类)。 在此之前,如果您在 Message 和 Comment 上有一个类别,并且需要使用这两个类别中的方法,则必须包含这两个类。 但是现在,您只需要包含 Comment.swift,其中包含类别(因为它有点像类别)Message.swift :)

【讨论】:

两个类没有生成。 一个类被生成。第二个文件是类扩展名,不是类。【参考方案2】:

我认为这与生产力无关。

当您更新实体(添加/删除属性或关系)时,将重新生成文件 NoteEntity+CoreDataProperties.swift(因此,将删除其中的任何代码)。这就是为什么你应该在文件 NoteEntity.swift 中实现类的原因。这样,每次更新 NSManagedObject 子类时,它都不会被删除。

【讨论】:

以上是关于Xcode 7 中的 CoreData 类的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中的实体中的实体 - Xcode

将 Core Data 添加到现有 Xcode 项目时出现未声明的标识符错误

Core Data 生成的类是不是被视为我的“模型”类?

插入时不调用 Core Data 的自定义验证方法

带有默认 Xcode 12 Core Data 项目的空白白屏

ios/xcode/core data:更新屏幕的最佳方式