Core data 核心数据:观察特定类型的新实体
我希望在添加(可能更改/删除)某种类型的实体时收到通知 我了解到,可以通过向managedObjectContext添加一个观察者来实现。然而,我还没有找到一个真正的方法来做到这一点 我正在做:Core data 核心数据:观察特定类型的新实体,core-data,nsmanagedobject,nsmanagedobjectcontext,nsnotifications,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,Nsnotifications,我希望在添加(可能更改/删除)某种类型的实体时收到通知 我了解到,可以通过向managedObjectContext添加一个观察者来实现。然而,我还没有找到一个真正的方法来做到这一点 我正在做: [context addObserver:self forKeyPath:@"{myEntityName}" options:{I have tried several different values, but I am failing to understand which one to use}
[context addObserver:self forKeyPath:@"{myEntityName}" options:{I have tried several different values, but I am failing to understand which one to use} context:@"NewEntity"];
谢谢你的帮助
注意:我对coredata/cocoa/objective-c显然是新手,这可能是非常基本的,但我一直在寻找答案。找不到关于如何正确观察上下文对象更改的示例和/或解释(我已经能够观察到特定实体上的更改,没有问题)
顺便说一句:这是一个类似的问题,表明这是可能的,但我缺乏细节:首先,不要混淆实体和对象。实体是类似于类的抽象,它们从不添加到托管对象上下文或从托管对象上下文中删除。在托管对象上下文中添加或删除的是托管对象。每个托管对象都被键控到数据模型中的实体,就像任何其他对象实例被键控到特定类一样 因此,您真正想要的是在插入/更新/删除键控到特定实体的托管对象时收到通知 处理此问题的最简单方法是注册上下文的:
NSManagedObjectContextObjectsDidChangeNotification
…它将在上下文中插入/更新/删除托管对象时提供通知。要仅查找键入到特定实体的托管对象,请检查NSInsertedObjectsKey、NSUpdatedObjectsKey和NSDeletedObjectsKey键返回的对象,然后检查每个对象的实体
属性
或者,使用自定义NSManagedObject子类并重写awakeFromInsert
,在首次插入对象时发出通知
我要指出的是,这种功能很少需要。当您发现自己连接了很多通知时,这通常表明您的数据模型需要重新设计以捕获更多信息。您通常需要通知,因为数据模型的某些关键逻辑没有编码在核心数据中,而是驻留在需要通知的外部对象中。我选择这种方法,它感觉更干净:
- 创建基于实体的
(使用界面生成器编写更少的代码)NSArrayController
- 观察阵列控制器的键路径
- 完成了
[[NSNotificationCenter defaultCenter]addObserver:自选择器:@selector({some method})名称:NSManagedObjectContextObjectsIDChangeNotification对象:上下文]代码>