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

标签 objective-c ios xcode parsing xcode4

我目前正在创建我的 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:因此,您实现的任何自定义初始化程序都必须首先调用此方法。 但是,正如文档中所说,您不鼓励覆盖此方法。

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

关于objective-c - 无法在 NSManagedObject 类 'building' 上调用指定的初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181776/

相关文章:

jquery - UIWebview 在 jquery 部分不滚动

ios - 如何使用 Objective-C 移动多个对象

ios - 无法导入导入 Project-Swift.h 的 Swift 桥接 header Objective-C 文件

ios - Swift 4 委托(delegate)不适用于标签栏 Controller

iphone - Delegate 和 NavigationController 的问题

ios - 这可能需要一段时间... ERROR : Error installing -- cocoapodas 1. 9

ios - 如何在没有 xib 文件的情况下使用 uiviewcontroller

objective-c - ios8如何实现交互式通知

c++ - 在 C++ 和 Objective-C 中使用字符串指针

swift - 如何访问 NSViewController 中的复制粘贴功能