簡體   English   中英

無法在NSManagedObject類“建築物”上調用指定的初始化程序

[英]Failed to call designated initializer on NSManagedObject class 'building'

我當前正在創建我的NSXMLParser,將委托傳遞給相關對象。

當我的解析器到達名稱為“ 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的類並創建解析器,然后從那里以正常方式創建實體?

抱歉,這篇長文章。

查看有關NSManagedObjects及其子類的對象生命周期文檔 生命周期與普通的NSObject類型的對象不同,如果要使用Core Data,則需要了解它。

NSManagedObjects的指定初始化器是initWithEntity:insertIntoManagedObjectContext:因此,您實現的任何自定義初始化器都必須首先調用此方法。 但是 ,正如文檔中所述,不鼓勵您重寫此方法。

相反,請在awakeFromInsertawakeFromFetch進行自定義初始化。 要創建NSManagedObject的新實例,請調用initWithEntity:insertIntoManagedObjectContext:或使用便捷方法+[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM