CoreData:错误:无法在NSManagedObject类上调用指定的初始化程序

Ben*_*ene 38 core-data objective-c initializer

我对CoreData有一点该死的问题.我想插入一个新的Object,所以我首先要创建一个.这是由该代码完成的:

Challenges *newChallenge = [[Challenges alloc] init];
[newChallenge setName:@"TestChallenge"];
[newChallenge setRounds:[[NSNumber alloc] initWithInt:12]];
[newChallenge setShots:[[NSNumber alloc] initWithInt:5]];
[newChallenge setDate:[NSDate date]];
Run Code Online (Sandbox Code Playgroud)

但是在alloc init之后我得到了这个错误:

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Challenges'
Run Code Online (Sandbox Code Playgroud)

黑客出了什么问题?

duD*_*uDE 60

我认为问题是挑战是一个NSManagedObject类,你需要指定的初始化程序:

initWithEntity:insertIntoManagedObjectContext:
Run Code Online (Sandbox Code Playgroud)

代替

Challenges *newChallenge = [[Challenges alloc] init];
Run Code Online (Sandbox Code Playgroud)

阅读更多..


Jay*_*uis 30

如果你问自己"好的,那么如何获得该实体呢?" (就像我一样),你通过使用entityForName方法这样做:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Challenges" inManagedObjectContext:self.managedObjectContext];

Challenges *newChallenge = [[Challenge alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,这个帖子对我帮助很大!


All*_*ian 13

NSManagedObject不能只alloc/ init就像你通常会用做NSObject.事实上,指定的初始化程序是: initWithEntity:insertIntoManagedObjectContext:

现在,对于实际错误,Apple 在文档中指出:

要点:此方法是NSManagedObject的指定初始值设定项.您不能仅通过发送init来初始化托管对象.

所以,你可以看到你需要两件事来初始化它,一个NSEntityDescription(你想要实例化的实体)和一个NSManagedObjectContext(创建新对象的上下文).