【问题标题】:Cocoa-Touch, NSManagedObject: Exception when setting a propertyCocoa-Touch,NSManagedObject:设置属性时出现异常
【发布时间】:2010-12-06 02:12:38
【问题描述】:

我有一个 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 日期],甚至为零。它仍然崩溃。

有什么想法吗?

【问题讨论】:

  • 这个符号“NS{String,Number}”是什么意思?
  • @ValeryPavlov 它来自 bash,它扩展到 NSString 和 NSNumber。在 ObjC 中不起作用,以这种方式输入会更快。例如。 Example{1,2,3} 扩展为 Example1、Example2、Example3。

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


【解决方案1】:

如果没有关联的 NSManagedObjectContext,则无法实例化 NSManagedObject 子类(您可以如您所示,但结果几乎肯定不会是您想要的)。

日志的第一行暗示了这一点:

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'd 对实体属性的属性访问的机制。如果没有这种机制,实例可能认为它无法响应 @synthesize 的调用,而您对 setData: 的调用将导致选择器未找到错误。

【讨论】:

  • 哦,那我也试试添加上下文。很奇怪,因为只有这个属性失败了。
  • 我怀疑失败与其他属性不一致是有点运气。
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多