1

大家好,我有一个 NSManagedObject 的子类。在 awakeFromInsert 和 awakeFromFetch 中,我调用了一个初始化方法,其中包括启动一个 NSTimer。

现在我需要一个地方来使计时器无效。但是,不会调用 dealloc、finalize、didTurnIntoFault、prepareForDeletion 和 willTurnIntoFault。

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

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

4

1 回答 1

0

核心数据控制着NSManagedObjects 的生命周期。除非您要求,否则它不会自行从内存中刷新对象。查看文档,似乎有两种方法:

  1. 发送refresh:mergeChanges:到 MOC 会导致对象变成故障。
  2. 发送reset到 MOC 会导致它自行重置,就好像它刚刚被创建一样。

但是,以上任何一项都需要您进行明确的操作,因此您不妨向对象添加一个方法以使其计时器无效并调用它。

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

于 2010-12-20T10:38:41.687 回答