NSManagedObject的子类很糟糕

时间:2010-12-19 09:31:53

标签: cocoa core-data persistence nsmanagedobject nsmanagedobjectcontext

嘿伙计们,我有一个NSManagedObject的子类。在awakeFromInsert和awakeFromFetch中,我正在调用一个初始化方法,其中包括启动NSTimer。

现在我需要一个让计时器无效的地方。但是,dealloc,finalize,didTurnIntoFault,prepareForDeletion和willTurnIntoFault都没有被调用。

根据文档,当从内存中清除对象时,应该调用这些方法。它们都不是,但是所有数据都保存在持久性存储中。我很困惑为什么或如何。

我有什么办法可以导致这些方法在对象生命周期中不被调用吗?

1 个答案:

答案 0 :(得分:0)

核心数据控制NSManagedObject的生命周期。除非你问它,否则它不会自己从内存中清除一个对象。查看documentation,似乎有两种方式:

  1. refresh:mergeChanges:发送给MOC会导致对象变成故障。
  2. reset发送给MOC会导致其重置,就像刚刚创建一样。
  3. 但是,上述任何一项都需要您做出明确的操作,因此您不妨向该对象添加一个方法以使其计时器无效并调用该方法。

    事实上,您的问题可能表明存在设计问题。 NSTimer本质上是一个用户界面事件。它应该由您的MVC控制器控制,该控制器向模型对象(NSManagedObject)发送消息以执行操作。