an0*_*an0 7 core-data key-value-observing nsmanagedobject ios
这里的完美KVO包括两部分:正确添加观察者并正确删除观察者.
故事:
并非所有对象都具有相同的观察属性集.我有选择地添加关键路径观察器,如下所示:
if(object.thumbnail_pic_url)[object addObserver:cell forKeyPath:@"thumbnail_picture"options:0 context:NULL];
对象可以删除.删除对象时,我必须删除观察者.数据库非常庞大和复杂,所以我绝对不想注册所有单元格来接收moc通知,如NSManagedObjectContextObjectsDidChangeNotification.但是如果必须的话,我可以接受在对象中添加一个单元格ivar,即使它再次成为好的Modle-View-Controller设计模式.
问题:在删除对象时,如何正确删除对象中所有已注册密钥路径的观察者(单元格)?
事实上,这是一个很大的问题,可以分为两个小问题:
如何确定要注销的关键路径?在删除对象后我无法查询其属性 - 这将导致无法填充的错误,因此我无法编写如下代码:
if(object.thumbnail_pic_url)[object removeObserver:cell forKeyPath:@"thumbnail_picture"];
并且我不能盲目地删除未注册的密钥路径的观察者 - 异常(无法删除关键路径"thumbnail_picture"的观察者,因为它未被注册为观察者.)将被抛出.
一个0,
有一个 NSManagedObject 方法专门用于执行删除定时功能:-prepareForDeletion。
其文档声称:“您可以实现此方法来执行删除对象之前所需的任何操作,例如关系被拆除之前的自定义传播,或使用键值观察重新配置对象。”
您还可以考虑使用:-willTurnIntoFault 和 -didTurnIntoFault。但我认为使用 -prepareForDeletion 会让您更高兴。
安德鲁
PS 此方法记录在类参考中。我谨建议您通过阅读文档来节省时间。
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |