类别中的 NSManagedObject 子类 属性

NSManagedObject subclass property in category

NSManagedObject 子类 属性 在其类别文件中创建,由于类别只能有方法,因此非常有线。详情如下:

(1).我在 .xcdatamodeld 文件中创建了一个名为 BibleAudio 的实体,具有如下几个属性。

(2)。 xcode 生成的 objective c 文件是 "BibleAudio + CoreDataProperties.h"、"BibleAudio + CoreDataProperties.m" 和 "BibleAudio.h"、"BibleAudio.m",如下所示:

(3)。在 "BibleAudio + CoreDataProperties.h" 中,BibleAudio 的属性在此处声明为 属性(见下文);而在 "BibleAudio.h" 中,它是空的。据我所知,"BibleAudio + CoreDataProperties.h"是一个类别文件,只能在这里声明方法。因此,我认为正确的方法是在 "BibleAudio.h" 中声明 属性,如果你想为这个 NSManagedObject 子类添加方法,你应该使用一个类别来添加该方法。

BibleAudio + CoreDataProperties.h

BibleAudio.h

有谁知道我的理解对不对?或者如果我错了,那背后的逻辑是什么?

在以前的 Xcode 版本中, 只为每个版本创建了一个 class 核心数据实体,例如BibleAudio.h/.m 中的 class "BibleAudio"。这些文件每次都被覆盖 重新创建了托管对象 subclasses。因此,要添加 你自己的核心数据功能 class,你必须定义 类别(在单独的文件中)在 class.

最大的缺点 是您可以在 class 类别中添加 methods,但不能 实例变量。所以你不能添加一个简单的 属性 (由实例变量支持)。一种可能的解决方法是 在实体中定义一个 transient 属性,但这也 缺点。

现在 Xcode 创建一个 class "BibleAudio" (在 BibleAudio.h/.m 中),它基本上是空的, 和类别 "BibleAudio (CoreDataProperties)" BibleAudio + CoreDataProperties.h/.m 类别文件包含所有核心数据属性,并且是 当您重新创建托管对象 subclasses.

时被覆盖

class 个文件 BibleAudio.h/.m 只创建一次,永远不会被覆盖。您可以在那里添加功能:像以前一样的方法,还有自定义属性和实例变量。因为它是 class 而不是类别,旧的限制不再适用。