创建NSManagedObject的子类

时间:2015-12-02 17:29:57

标签: ios objective-c nsmanagedobject

我有一个子类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提供委托,并在另一个问题中建议继承我的NSManagedObjectNSManagedObject 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:

enter image description here

我使用Xcode创建了子类NSManagedObject并创建了FooMapState.h / .m文件(而不仅仅是MapState.h / .m文件):

@interface FooMapState : NSManagedObject

@end

FooMapState和MapState是相同的,只是名称不同。它们都是子类NSManagedObject,这使得创建委托很困难(回到我发布的原始问题)。

1 个答案:

答案 0 :(得分:1)

您遇到问题是因为您尝试创建实体MapState的实例,但您的数据模型中没有此类实体 - 实体名称为{{1} }。

拥有MapStateDB子类是可以的,但为了创建实例,您需要在数据模型中为实体设置正确的类名。因此,在MapState实体上,将类名设置为MapStateDB(您可以在那里键入任何类名)。然后,当您创建MapState实体的新实例时,您将获得MapStateDB类的实例。