核心数据:观察某种类型的新实体

ruf*_*ufo 4 core-data nsnotifications nsmanagedobject nsmanagedobjectcontext

我希望每当添加某种类型的实体(并且可能更改/删除)时都会收到通知.

我通过向managedObjectContext添加一个观察者来读取它是可能的.但是,我还没有找到实际的方法.

我在做:

[context addObserver:self forKeyPath:@"{myEntityName}" options:{I have tried several different values, but I am failing to understand which one to use} context:@"NewEntity"];
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

注意:我显然是coredata/cocoa/objective-c的新手,这可能是非常基本的,但一直在追逐答案.无法找到关于如何正确观察上下文对象的更改的示例和/或解释(我已经能够观察到特定实体的更改而没有问题).

顺便说一句:这是一个类似的问题,表明这是可能的,但我缺乏细节:核心数据:观察某些类型的实体的所有变化

Tec*_*Zen 9

首先,不要混淆实体和对象.实体是类似于类的抽象,它们永远不会添加到托管对象上下文或从托管对象上下文中删除.它是在托管对象上下文中添加或删除的托管对象.每个托管对象都键入数据模型中的实体,就像任何其他对象实例键入特定类一样.

因此,当您插入/更新/删除键入特定实体的托管对象时,您真正想要的是通知您.

处理此问题的最简单方法是注册上下文:

NSManagedObjectContextObjectsDidChangeNotification
Run Code Online (Sandbox Code Playgroud)

...每当插入/更新/删除上下文中的托管对象时,它将提供通知.要仅查找键入特定实体的托管对象,请检查NSInsertedObjectsKey,NSUpdatedObjectsKey和NSDeletedObjectsKey键返回的对象,然后检查entity每个对象的属性.

或者,您使用自定义NSManagedObject子类并覆盖awakeFromInsert以在首次插入对象时发出通知.

我会注意到很少需要这样的功能.当您发现自己连接大量通知时,通常表明您的数据模型需要重新编写以捕获更多信息.您通常需要通知,因为数据模型的某些关键逻辑不是在Core Data中编码,而是驻留在需要通知的外部对象中.

  • 谢谢!这样就解决了.对于任何寻找特定代码的人:`[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector({some method})name:NSManagedObjectContextObjectsDidChangeNotification object:context];` (2认同)