Objective c 未能调用NSManagedObject类上的指定初始值设定项';大楼';

Objective c 未能调用NSManagedObject类上的指定初始值设定项';大楼';,objective-c,ios,xcode,parsing,xcode4,Objective C,Ios,Xcode,Parsing,Xcode4,我目前正在创建NSXMLParser,在这里我将委托传递给相关对象 当我的解析器到达一个名为“building”的元素时,它将用下面的代码初始化一个新的建筑 if ([elementName isEqualToString:@"building"]) { building = [[Building alloc] initWithAttributes:attributeDict parent:self children:nil parser:parser]; } 我在Building类

我目前正在创建NSXMLParser,在这里我将委托传递给相关对象

当我的解析器到达一个名为“building”的元素时,它将用下面的代码初始化一个新的建筑

if ([elementName isEqualToString:@"building"]) 
{
    building = [[Building alloc] initWithAttributes:attributeDict parent:self children:nil parser:parser];
}
我在Building类中创建了自己的初始值设定项,它是NSManagedObject的一个子类(从核心数据自动创建)

看起来是这样的:

- (id)initWithParser:(NSXMLParser *)parser 
{
    if (self = [super init])
    {
        [parser setDelegate:self];
    }
    return self;
}
但当我运行它时,我得到了这个错误:“未能调用NSManagedObject类上指定的初始值设定项”

Building类应该继续解析Building下的标记,并从XML文件中创建对象图

换句话说,Building类需要知道如何解析、填充实例变量、创建实体并将其保存到对象图(只是为了理解,这可以忽略)

我做错什么了吗?我不能创建自己的初始值设定项?也许我应该创建一个从NSObject继承的类,创建我的解析器,然后以正常的方式从那里创建实体

很抱歉写了这么长的文章。

请看一看NSManagedObjects及其子类的定义。生命周期不同于普通的NSObject类型对象,如果要使用核心数据,您需要了解它

NSManagedObjects的指定初始值设定项是,因此您实现的任何自定义初始值设定项都必须首先调用此方法但是,正如文档中所述,不鼓励您重写此方法


相反,在
awakeFromInsert
awakeFromFetch
中进行自定义初始化。要创建NSManagedObject的新实例,请调用
initWithEntity:InsertintoManagedObject上下文:
或使用便利方法。

谢谢,我想我现在明白了。哦,是的,这意味着我的方法没有错?有可能吧?:)我不确定您是如何组织代码的,但看起来您正试图将解析与NSManagedObject紧密地结合在一起。如果我是你,我会创建一个单独的NSObject派生的NSXMLParser委托,它在一个地方管理NSManagedObjects的创建和配置。将NSManagedObjects设置为解析器委托并在多个对象之间分配解析对我来说过于复杂且容易出错。是的,我还认为我实际上将解析与NSManagedObjects耦合得太近了。由于您比我更有经验,我想正确的方法是创建抓住解析器委托的类。我将不处理NSManagedObjects.:)谢谢