我有一个对象——Config
。我想知道是否Account
属性上Config
已经改变。当这种情况发生时,我想发送一个NSNotification
这样所有关心何时的代码Account
变化就会知道。我最初的想法是在我的NSManagedObject
我要重写的子类setAccount
设置瞬态属性的方法AccountDidChange
to true
。然后在didSave
if AccountDidChange
was true
我会发送通知,然后将其设置回false
。有没有更好的办法?但我的问题是,根据我读过的内容,通过改变AccountDidChange
回到false
,我会弄脏我的对象并需要再次保存。
更多信息:
这Config
object 是应用程序的当前配置。Account
实际上可以改为ActiveAccount
。有一个关系到Account
具有所有帐户列表的实体。这个想法是用户可以更改应用程序的活动帐户。所以我们有一组服务器,用户一次只能登录一个。Config.Account
指向该活动帐户,它用于设置与服务器的连接以检索信息。我正在使用此通知Config.Account
已更改为告诉其他对象清理其信息 - 例如警报列表。基本上,所有信息都是每个帐户的,因此需要将其删除,然后在下次加载时使用新的活动帐户重新获取。
另外,给定的名称不是我的实际对象名称 - 只是想让示例更容易理解。
看看KVO(键值观察):键值观察编程指南 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOBasics.html#//apple_ref/doc/uid/20002252-178352。这是在 Cocoa 中执行此操作的标准方法,也是成为一名优秀的 Cocoa 程序员需要了解的基本技术。
KVO 会让关心变化的对象Account
属性(您可能应该将其命名为account
, not Account
) 注册以便在财产变更时收到通知。 KVO 将“只适用于”标准 NSManagedObjects,无需您做任何额外的工作。
相关方法如下:
-
-addObserver:forKeyPath:options:context:
您可以在 Config 对象上调用它来设置观察
-
-observeValueForKeyPath:ofObject:change:context:
每当观察值发生变化时,都会在观察者对象上调用它
-
-removeObserver:forKeyPath:
您需要确保在观察者不再需要更改通知时(包括在观察者被释放之前)调用它。
链接文档中对此进行了更详细的描述。
编辑如下:
如果不了解有关您的应用程序的任何信息,就很难知道为什么您只想在保存时收到通知。 NSManagedObjectContext 发布 NSManagedObjectContextWillSaveNotification 和 NSManagedObjectContextDidSaveNotification。通知的 userInfo 具有包含插入、更新和删除对象的数组,但通知不如单个属性那么细粒度。我想您可以手动跟踪 didSave 通知之间更改的帐户。如果您的商店中有大量配置,这可能会变得低效。
对 NSManagedObjects 的更改是立即的,它们只是在您调用之前不会保存到持久存储中save:
在托管对象上下文上。也许如果您详细解释一下您想要实现的目标及其原因,我可以更好地提供帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)