创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是相同的,只是名称不同而已。 它们都是NSManagedObjectNSManagedObject ,这使得创build委托变得困难(回到我发布的原始问题)。

您遇到问题是因为您尝试创build实体MapState的实例,但是您的数据模型中没有这样的实体 – 实体名称是MapStateDB

具有MapState子类是可以的,但为了创build实例,您需要为数据模型中的实体设置正确的类名称。 因此,在MapStateDB实体上,将类名称设置为MapState (您可以在其中键入任何类名称)。 然后当你创build一个MapStateDB实体的新实例时,你会得到一个MapState类的实例。