无法在NSManagedObject类'building'上调用指定的初始值设定项

WYS*_*WYS 3 xcode parsing objective-c ios xcode4

我正在创建我的NSXMLParser,我将委托传递给相关对象.

当我的解析器到达名为"building"的元素时,它将使用此代码初始化一个新的Building.

if ([elementName isEqualToString:@"building"]) 
{
    building = [[Building alloc] initWithAttributes:attributeDict parent:self children:nil parser:parser];
}
Run Code Online (Sandbox Code Playgroud)

我在Building类中创建了自己的初始化程序,它是NSManagedObject的子类.(从Core Data自动创建).

它看起来像这样:

- (id)initWithParser:(NSXMLParser *)parser 
{
    if (self = [super init])
    {
        [parser setDelegate:self];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时出现这个错误:"无法在NSManagedObject类上调用指定的初始化程序".

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

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

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

对不起这篇长篇文章.

Rob*_*ill 10

查看NSManagedObjects及其子类的对象生命周期文档.生命周期与普通的NSObject类型对象不同,如果要使用Core Data,则需要了解它.

NSManagedObjects的指定初始化initWithEntity:insertIntoManagedObjectContext:程序是您实现的任何自定义初始值设定项必须首先调用此方法.但是,正如文档中所述,不鼓励您覆盖此方法.

相反,在awakeFromInsert或中进行自定义初始化awakeFromFetch.要创建NSManagedObject的新实例,请调用initWithEntity:insertIntoManagedObjectContext:或使用便捷方法+[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:].