我有一个扮演播放列表角色的托管对象,它与播放列表项目具有一对多的关系。可以有多个播放列表,但只有一个“活动”播放列表。托管对象上的布尔属性指示活动播放列表。
我将活动播放列表中的项目数显示为选项卡栏项上的标记。选项卡栏项代表的视图控制器正在监听特定通知,当活动播放列表的内容更新时触发该通知。
我已经以我认为笨拙的方式实现了这一点,并希望做得更好。目前它确实起作用,但我不满意。
目前,每个播放列表对象在
如果播放列表失去或获得活动状态,则适当停止或开始观察自身,因此仅从活动播放列表触发通知。
我想删除所有自我观察KVO代码,因为我担心各种进入和退出点以及何时适当添加和删除观察者。这似乎太糟糕了。
我想只覆盖
我将活动播放列表中的项目数显示为选项卡栏项上的标记。选项卡栏项代表的视图控制器正在监听特定通知,当活动播放列表的内容更新时触发该通知。
我已经以我认为笨拙的方式实现了这一点,并希望做得更好。目前它确实起作用,但我不满意。
目前,每个播放列表对象在
awakeFromFetch
上检查是否为活动对象,如果是,则使用键值观察注册自身为观察器,其key路径是关系的键。当它观察到更改时,它触发通知,从而导致选项卡栏项更新自身。如果播放列表失去或获得活动状态,则适当停止或开始观察自身,因此仅从活动播放列表触发通知。
我想删除所有自我观察KVO代码,因为我担心各种进入和退出点以及何时适当添加和删除观察者。这似乎太糟糕了。
我想只覆盖
didChangeValueForKey:
,在必要时检查并发送我的通知,然后调用super实现。但是,文档明确禁止这样做:
那我该怎么办?didChangeValueForKey:
用于通知接收方某个属性的值已更改。
-(void)didChangeValueForKey:(NSString *)key
参数
key
更改的属性名称。
讨论详见键值观察编程指南。
您不能覆盖此方法。