具有非托管属性的托管对象是否可以出错?

时间:2010-10-19 21:04:50

标签: objective-c core-data nsmanagedobject fault

核心数据文档说如果需要,对象可能会出错以节省内存。如果您的对象具有不属于托管属性的属性,会发生什么?

例如,假设您有一个Department类,它是NSManagedObject的子类。它有一个位置iVar +访问器。 location属性不是Department的属性;它不受管理,也从不持久。

如果你有一个Department对象数组,或者一个与Department有一对一关系的Employee对象,那么部门是否有可能出错?如果您设置了Department.location,您是否可以确定该位置始终存在,或者部门是否可能出错,然后您将丢失存储在该位置的值?

2 个答案:

答案 0 :(得分:1)

我不相信非托管数据会留在那里。即使现在这样做,行为也可能在未来发生变化。更重要的是,在架构上我不建议将非托管数据保留在托管对象中。你最好的选择:

  1. 制作托管数据,或
  2. 可以从托管数据中计算非托管数据,或者
  3. 制作一个具有非托管数据且部门为ivars的对象。

答案 1 :(得分:1)

部门仍然可能出现故障,它只是您在模型中描述的故障属性。通常情况下,您描述的情况由“瞬态”属性覆盖,这些属性是未存储在CoreData中的属性,但对象模型可以识别它们。

实现瞬态属性时,提供为该属性提供值所需的存储(或计算)。

在您的情况下,假设您的“位置”值将来不存在是完全合理的,因为只有当实际的托管对象保留在内存中时它才会存在。换句话说,任何导致托管对象被释放的操作(例如上下文重置,保存或更新保存通知)都可能导致该值丢失(因为它所绑定的托管对象变为故障或无效) )。

相关问题