以前曾经问过这个问题,但是没有明确的答案,也许有些事情在一年内发生了变化。
我的Android应用程序能够观察对首选项所做的更改,并将适当的更改传播到应用程序的所有部分。
我知道Objective-C对Key-Value Observing有很好的支持。是否可以观察Objective-C中对首选项的更改?我可以: 为NSUserDefaults创建一个外观:
定义某个“偏好”类,
为我感兴趣的每个用户默认值实现一个属性,
注册对更改感兴趣的类,以观察属性的更改
通过“偏好设置”类设置用户默认值
每次设置默认值时,都会更改默认属性的值
并以这种方式使用KVO。
有更简单的方法吗?这似乎是一场维护噩梦。
谢谢!
答案 0 :(得分:2)
在MacOS上有NSUserDefaultsController来处理这个问题,但正如我所知,这在iOS上不可用。
看来你在这里唯一的办法是听取非常粗粒度的NSUserDefaultsDidChangeNotification,然后根据用户默认值重新填充所有内容。否则,是的,您必须保留旧状态的副本并提供自定义代码以发送每个差异的键值更改通知。有点拖累。
不幸的是;我知道iOS不支持Cocoa绑定,但我仍然可以看到NSUserDefaultsController的用途。
我的原帖:
据我了解,仅NSUserDefaults不是Key-Value Observable,而是使用NSNotification通知侦听器有关更改。如果你想要KVO用户默认值,你会想要使用NSUserDefaultsController。
你想做什么NSUserDefaultsController没有启用?你为什么要为此自己上课?