Cocoa-Touch,NSManagedObject:设置属性时的异常

时间:2009-10-12 19:00:20

标签: iphone objective-c cocoa-touch core-data

我有一个NSManagedObject子类,由XCode模型接口创建 该类有一些NSString和NSNumber成员,以及一个NSDate成员。

当我尝试设置NSDate成员时,我得到以下异常:
2009-10-12 21:53:32.228 xxx[2435:20b] Failed to call designated initializer on NSManagedObject class 'Item'
2009-10-12 21:53:32.228 xxx[2435:20b] *** -[Item setDate:]: unrecognized selector sent to instance 0x3f7ed30
2009-10-12 21:53:32.229 xxx[2435:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Item setDate:]: unrecognized selector sent to instance 0x3f7ed30'

日期参数与其他参数一样,除了不是

@property (nonatomic, retain) NS{String,Number}* propname;  

这是一个

@property (nonatomic, retain) NSDate *date;

顺便说一句,我正在分配的Item实例只是一个普通的[[Item alloc] init],没有关联的上下文或任何内容。

首先我认为我的NSDate *有问题,然后我尝试分配它[NSDate日期],甚至是零。它仍然崩溃。

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

如果没有关联的NSManagedObject,你就无法实例化NSManagedObjectContext子类(正如你所显示的那样可以,但结果几乎肯定不是你的要)。

日志的第一行提示:

2009-10-12 21:53:32.228 xxx[2435:20b] Failed to call designated initializer on NSManagedObject class 'Item'

所有Objective-C类(按照惯例)都有一个指定的初始化程序,它是必须必须调用的初始化方法,可以是显式的,也可以是通过其他方便的初始化程序。在NSManagedObject的情况下,这是-[NSManagedObject initWithEntity:insertIntoManagedObjectContext:]。未能导致指定的初始化程序导致未定义且可能不正确的行为,因为不保证实例已正确初始化。我猜想NSManagedObject初始化程序设置机制以支持实体属性的@synthesize'属性访问。如果没有此机制,实例可能认为它无法响应@synthesize'd个来电,而您对setData:的调用将导致选择器未找到错误。