【问题标题】:Error : CoreData: error: Failed to call designated initializer on NSManagedObject class 'Product'错误:CoreData:错误:无法调用 NSManagedObject 类“产品”上的指定初始化程序
【发布时间】:2012-02-26 03:51:51
【问题描述】:

我开始在 ios 5 中使用核心数据。我有我的产品模型:

产品.m:

#import "Product.h"
@implementation Product
    @dynamic category_id;
    @dynamic label;
    @dynamic price;
@end

产品.h:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface Product : NSManagedObject 
  @property (nonatomic, retain) NSString *category_id;
  @property (nonatomic, retain) NSString *label;
  @property (nonatomic, retain) NSString *price;
@end

我尝试使用 NSXMLParserDelegate 解析带有自定义类的 xml。我的 xml 看起来像:

<section id="2">
  <label>Animaux</label>
  <image>Images/Rayons/Bandeau/Animaux.png</image>
  <key>Images/Rayons/Bandeau/Animaux.png</key>
  <products>
     <Product id="21">
        <category_id>Chat</category_id>
        <label>Aliments pour chat</label>
        <price>2.00</price>
     </Product>
     <Product id="1286">
        <category_id>Chat</category_id>
        <label>Boite de paté</label>
        <price>0.00</price>
     </Product>
  </products>
</sections>

当我有一个应答器产品时,我会这样构建我的模型:

item = [[NSClassFromString(className) alloc] init];

当我有一个属性作为 category_id 时,我会这样做:

[item setValue:currentNodeContent forKey:elementName];

我得到了错误:

CoreData:错误:无法调用 NSManagedObject 类“产品”上的指定初始化程序

有什么想法吗?

【问题讨论】:

    标签: objective-c core-data ios5


    【解决方案1】:

    NSManagedObject 的文档指出专用初始化程序是:

    initWithEntity:insertIntoManagedObjectContext:
    

    这就是失败的原因。我见过的大多数例子都建议你应该得到一个像这样的新对象

    [NSEntityDescription entityForName:@"MyClass" inManagedObjectContext:self.managedObjectContext]];
    

    所以你可以试试这样的:

    [NSEntityDescription entityForName:className inManagedObjectContext:self.managedObjectContext]];
    

    【讨论】:

    • 您不需要NSClassFromString(),因为entityForName:inManagedObjectContext: 需要NSString 作为实体名称。
    • 是的,我尝试使用此代码,但我的应用程序崩溃没有特定错误:[NSEntityDescription entityForName:className inManagedObjectContext:managedObjectContext],我该如何声明 managedObjectContext?
    • 我解决了使用 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate] 获取 managedObjectContext 的问题; NSManagedObjectContext *context = [appDelegate managedObjectContext];
    猜你喜欢
    • 2014-10-19
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多