NSManagedObject 子类问题
Posted
技术标签:
【中文标题】NSManagedObject 子类问题【英文标题】:NSManagedObject subclass woes 【发布时间】:2010-12-19 09:31:52 【问题描述】:大家好,我有一个 NSManagedObject 的子类。在 awakeFromInsert 和 awakeFromFetch 中,我调用了一个初始化方法,其中包括启动一个 NSTimer。
现在我需要一个地方来使计时器失效。但是,不会调用 dealloc、finalize、didTurnIntoFault、prepareForDeletion 和 willTurnIntoFault。
根据文档,当对象从内存中清除时,这些方法都应该被调用。它们都不是,但是所有数据都保存在持久存储中。我对为什么或如何感到困惑。
我可以做些什么来导致这些方法在对象生命周期中不被调用?
【问题讨论】:
【参考方案1】:核心数据控制NSManagedObject
s 的生命周期。除非您要求,否则它不会自行从内存中刷新对象。查看documentation,似乎有两种方式:
-
向 MOC 发送
refresh:mergeChanges:
会导致对象变成故障。
向 MOC 发送 reset
会导致 MOC 像刚刚创建一样重置自身。
但是,以上任何一项都需要您进行明确的操作,因此您不妨向对象添加一个方法以使其计时器无效并调用它。
事实上,您的问题可能表明存在设计问题。 NSTimer 本质上是一个用户界面事件。它可能应该由您的 MVC 控制器控制,该控制器向模型对象(NSManagedObject)发送消息以执行操作。
【讨论】:
但是当应用程序退出时不应该从内存中刷新对象吗?所以应该调用dealloc、didTurnIntoFault等清理方法……不应该吗?以上是关于NSManagedObject 子类问题的主要内容,如果未能解决你的问题,请参考以下文章