【问题标题】:NSManagedObject subclass property in category类别中的 NSManagedObject 子类属性
【发布时间】:2015-12-03 10:48:31
【问题描述】:

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

有人知道我的理解是否正确吗?或者如果我错了,那背后的逻辑是什么?

【问题讨论】:

    标签: ios core-data objective-c-category


    【解决方案1】:

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

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

    现在 Xcode 创建一个基本上是空的类“BibleAudio”(在BibleAudio.h/.m 中), 和类别“BibleAudio (CoreDataProperties)” BibleAudio + CoreDataProperties.h/.m 类别文件包含所有核心数据属性,并且是 重新创建托管对象子类时被覆盖。

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

    【讨论】:

    • 您的回复真的很有帮助!我有一个问题,BibleAudio + CoreDataProperties.h/.m(一个类别)声明属性的机制是什么。我们可以在类别中也为我们自己的类声明属性吗?
    • @Johnson:Core Data 属性可以在一个类别中定义,因为它们不是由实例变量支持,而是由托管对象上下文支持,getter 和 setter 是动态的在运行时创建(它们在 .m 类别文件中标记为 @dynamic)。 – 所有您的自定义都在类文件中完成,而不是在类别文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    相关资源
    最近更新 更多