我目前正在创建我的 NSXMLParser,我将委托(delegate)传递给相关对象。
当我的解析器遇到名为“building”的元素时,它将使用此代码初始化一个新的 Building。
if ([elementName isEqualToString:@"building"])
{
building = [[Building alloc] initWithAttributes:attributeDict parent:self children:nil parser:parser];
}
我在 Building 类中创建了自己的初始化程序,它是 NSManagedObject 的子类。(从 Core Data 自动创建)。
看起来像这样:
- (id)initWithParser:(NSXMLParser *)parser
{
if (self = [super init])
{
[parser setDelegate:self];
}
return self;
}
但是当我运行它时出现这个错误:“无法在 NSManagedObject 类上调用指定的初始化程序”。
Building 类应该继续解析正在构建的标签并从 XML 文件中创建对象图。
换句话说,Building类需要知道如何解析、填充实例变量、创建实体并将其保存到对象图中。(仅供理解,可以忽略)
我做错了什么吗?我可能不会创建自己的初始化程序?也许我应该创建一个继承自 NSObject 的类并创建我的解析器,然后从那里以正常方式创建实体?
抱歉发了这么长的帖子。
最佳答案
看看 documentation for the object life-cycle NSManagedObjects 及其子类。生命周期不同于普通的 NSObject 类型对象,如果您要使用 Core Data,则需要了解它。
NSManagedObjects 的指定初始化器是 initWithEntity:insertIntoManagedObjectContext:
因此,您实现的任何自定义初始化程序都必须首先调用此方法。 但是,正如文档中所说,您不鼓励覆盖此方法。
相反,在 awakeFromInsert
或 awakeFromFetch
中进行自定义初始化。要创建 NSManagedObject 的新实例,您可以调用 initWithEntity:insertIntoManagedObjectContext:
或使用便捷方法 +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
.
关于objective-c - 无法在 NSManagedObject 类 'building' 上调用指定的初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181776/