NSManagedObject子类属性在其类别文件中创建,该文件非常有线,因为类别只能有方法.详情如下:
(1).我在.xcdatamodeld文件中创建了一个名为BibleAudio的实体,其中包含以下几个属性.
(2).xcode生成的目标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版本中,只为每个Core Data实体创建了一个类,例如,"BibleAudio"类BibleAudio.h/.m
.每次重新创建托管对象子类时,都会覆盖这些文件.因此,要将自己的功能添加到Core Data类,您必须在类上定义一个类别(在单独的文件中).
最大的缺点是您可以在类类别中添加方法,但不能添加 实例变量.因此,您无法添加简单属性(由实例变量备份).一种可能的解决方法是在实体中定义瞬态属性,但这也有缺点.
现在 Xcode创建了一个类"BibleAudio"(in BibleAudio.h/.m
),它基本上是空的,BibleAudio + CoreDataProperties.h/.m
类别文件中的类别"BibleAudio(CoreDataProperties)"
包含所有Core Data属性,并在重新创建托管对象子类时被覆盖.
类文件BibleAudio.h/.m
只创建一次,永远不会被覆盖.您可以在那里添加功能:方法和以前一样,还有自定义属性和实例变量.因为它是一个类而不是一个类别,旧的限制不再适用.