我有一个子类NSManagedObject
类:
@interface MapStateDB : NSManagedObject
@end
现在我想创建一个MapStateDB
类的子类:
·H
@interface MapState : MapStateDB
@property (weak, nonatomic) id <MapStateDelegate> delegate;
@end
的.m
@implementation MapState
@synthesize delegate = _delegate;
@end
除非我尝试创建MapState
对象,否则它将失败:
MapState *mapState = [MapState MR_createEntityInContext:context];
DLog(@"mapState: %@", mapState);
输出:
DEBUG | -[LoginViewController testStuff] | mapState: (null)
我可以很好地创建一个`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
提供委托,并在另一个问题中建议继承我的NSManagedObject
:NSManagedObject with Category and Delegate
为什么没有创建子类MapState
对象的任何想法?
编辑:
我用Objective-C标准[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.'
所以Magical Record正在捕捉错误并返回nil
。所以我猜@ Rickster的问题是指向这个问题,我的核心数据模型不知道MapState
是什么。
我可以为代表创建一个临时属性吗?或者我应该使用包装类吗?
是否可以获得具有委托属性的NSManagedObject
?
编辑2:
我尝试将MapStateDB实体的类更改为FooMapState:
我使用Xcode创建了子类NSManagedObject
并创建了FooMapState.h / .m文件(而不仅仅是MapState.h / .m文件):
@interface FooMapState : NSManagedObject
@end
FooMapState和MapState是相同的,只是名称不同。它们都是子类NSManagedObject
,这使得创建委托很困难(回到我发布的原始问题)。
答案 0 :(得分:1)
您遇到问题是因为您尝试创建实体MapState
的实例,但您的数据模型中没有此类实体 - 实体名称为{{1} }。
拥有MapStateDB
子类是可以的,但为了创建实例,您需要在数据模型中为实体设置正确的类名。因此,在MapState
实体上,将类名设置为MapStateDB
(您可以在那里键入任何类名)。然后,当您创建MapState
实体的新实例时,您将获得MapStateDB
类的实例。