【问题标题】:CoreData add object to a to-many Relationship errorCoreData 将对象添加到一对多关系错误
【发布时间】:2014-04-10 03:17:53
【问题描述】:

我有一个与目标有一对多关系的 CoreData 对象 Player。我正在尝试像这样添加一个目标对象,

Goal *fg =(Goal*)[self.database createGoalObject]; //Custom function 

Player* player = (Player*)[NSEntityDescription insertNewObjectForEntityForName:@"Player" inManagedObjectContext:self.database.managedObjectContext];

[player addGoalsObject:fg];

我的应用因以下错误而中断:

'NSInvalidArgumentException', reason: '-[__NSCFSet entity]: unrecognized selector sent to instance 0x8d90f00'

调试提示符处的 po 显示 0x8d90f00 是一个 Goal 对象。我的问题是:

  1. 为什么核心数据向目标对象发送消息?
  2. 为什么 Player 的目标关系初始化为零?加载前不应该是空集吗?
  3. 是否必须覆盖 Player.h 中的 addGoalsObject 才能手动设置值?

【问题讨论】:

  • 你能显示createGoalObject方法吗?

标签: ios objective-c core-data object-relationships


【解决方案1】:

该错误明确表示,某些东西试图在 __NSCFSet 上调用 entity 方法。换句话说,0x8d90f00 处的对象是某种类型的 NSSet。

po 0x8d90f00 的输出会稍微误导您,因为 NSSet 的 description 方法将包括它所包含的对象的描述,用 {()} 字符包裹。

如果您完成po [0x8d90f00 class],它会回复NSSetNSMutableSet

您的 createGoalObject 正在返回一个集合。

【讨论】:

  • 你是对的。 po 0x8d90f00 显示它包含的对象的描述。 po [0x8d90f00 class] 确实以 __NSCFSet 响应。不确定我是否更接近解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多