创build一个NSManagedObject的子类
我有一个子类NSManagedObject
类:
@interface MapStateDB : NSManagedObject @end
现在我想创build一个MapStateDB
类的子类:
。H
@interface MapState : MapStateDB @property (weak, nonatomic) id <MapStateDelegate> delegate; @end
.M
@implementation MapState @synthesize delegate = _delegate; @end
除了当我尝试创build一个MapState
对象时,它失败:
MapState *mapState = [MapState MR_createEntityInContext:context]; DLog(@"mapState: %@", mapState);
输出:
DEBUG | -[LoginViewController testStuff] | mapState: (null)
我可以创build一个MapStateDB对象:
MapStateDB *mapStateDB = [MapStateDB MR_createEntityInContext:context]; DLog(@"mapStateDB: %@", mapStateDB);
输出:
DEBUG | -[LoginViewController testStuff] | mapStateDB: <MapStateDB: 0x7d432d00> (entity: MapStateDB; id: 0x7d424640 <x-coredata:///MapStateDB/tF842754F-4044-44E5-A9D5-118389ABF4AA2>
最初的意图是提供委托给一个NSManagedObject
,并在另一个问题中build议子类化我的NSManagedObject
: NSManagedObject与类别和委托
任何想法为什么没有创build子类的MapState
对象?
编辑:
我用Objective-C标准[insertNewObjectForEntityForName:inManagedObjectContext:]
replace了Magical Record方法[MR_createEntityInContext:]
[insertNewObjectForEntityForName:inManagedObjectContext:]
:
MapState *mapState2 = [NSEntityDescription insertNewObjectForEntityForName:@"MapState" inManagedObjectContext:context]; DLog(@"mapState2: %@", mapState2);
输出:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an entity named 'MapState' in this model.'
所以魔法logging正在捕捉错误,并返回nil
。 所以我猜@ Rickster的问题是指向这个问题,我的核心数据模型不知道什么是MapState
。
我可以为代表做一个临时性的财产吗? 或者我应该只使用包装类?
是否有可能获得委托属性的NSManagedObject
?
编辑2:
我试图将MapStateDB实体的类更改为FooMapState:
我使用Xcode创build子类NSManagedObject
,并创buildFooMapState.h / .m文件(而不是只是MapState.h / .m文件):
@interface FooMapState : NSManagedObject @end
FooMapState和MapState是相同的,只是名称不同而已。 它们都是NSManagedObject
子NSManagedObject
,这使得创build委托变得困难(回到我发布的原始问题)。
您遇到问题是因为您尝试创build实体MapState
的实例,但是您的数据模型中没有这样的实体 – 实体名称是MapStateDB
。
具有MapState
子类是可以的,但为了创build实例,您需要为数据模型中的实体设置正确的类名称。 因此,在MapStateDB
实体上,将类名称设置为MapState
(您可以在其中键入任何类名称)。 然后当你创build一个MapStateDB
实体的新实例时,你会得到一个MapState
类的实例。