核心数据NSManagedObject – 跟踪属性是否改变
我有一个对象 – Config
。 我想知道Config
上的Account
属性是否已经改变。 发生这种情况时,我想发送一个NSNotification
以便所有关心Account
更改的代码都知道。 我最初的想法是在我的NSManagedObject
子类,我会重写setAccount
方法设置一个瞬态属性AccountDidChange
为true
。 然后在didSave
如果AccountDidChange
为true
我会发送通知,然后将其设置为false
。 有没有更好的办法? 我的问题是,从我读过的,通过改变AccountDidChange
回到false
,我会弄脏我的对象,需要再次保存。
更多信息: Config
对象是应用程序的当前configuration。 Account
实际上可以更改为ActiveAccount
。 与Account
实体有关系,其中包含所有帐户的列表。 这个想法是,用户可以更改应用程序的活动帐户。 所以我们有一套服务器,用户一次只能login一个。 Config.Account
指向该活动帐户,并用于build立到服务器的连接以检索信息。 我正在使用这个通知Config.Account
已经改变,告诉其他对象清理他们的信息 – 如警报列表。 基本上,所有的信息都是每个账户,所以它需要被删除,然后在新的活动账户的下一次加载中重新获取。
此外,给定的名称不是我的实际对象名称 – 只是试图让示例更容易遵循。
看看KVO(键值观测): 键值观测编程指南 。 这是在Cocoa中这样做的标准方法,并且是您需要理解为一名优秀的Cocoa程序员的基本技术。
KVO会让关心更改Account
属性的对象(您应该指定account
而不是Account
)注册,以便在属性发生变化时通知您。 KVO将为标准NSManagedObjects“正常工作”,而不需要任何额外的工作。
相关的方法如下:
-
-addObserver:forKeyPath:options:context:
您在Config对象上调用以设置观察值 -
-observeValueForKeyPath:ofObject:change:context:
随时观察值被改变的观察者对象 -
-removeObserver:forKeyPath:
当观察者不再需要更改通知时(包括在释放观察者之前),您需要确保调用它。
这在链接文档中有更详细的描述。
编辑如下:
不知道你的应用程序的任何东西,很难知道为什么你只想保存通知。 NSManagedObjectContext发布NSManagedObjectContextWillSaveNotification和NSManagedObjectContextDidSaveNotification。 通知的userInfo具有包含插入,更新和删除对象的数组,但通知并不像单个属性那样精细。 我想你可以手动跟踪didSave通知之间的更改帐户。 如果您的商店中有大量configuration,那么效率可能会很低。
对NSManagedObjects的更改是即时的,直到您在托pipe对象上下文中调用save:
它们才被保存到持久性存储中。 也许如果你更多地解释你想要完成什么,为什么,我可以更好地帮助。