【问题标题】:iOS5 NSUserDefaults Observe changes for key?iOS5 NSUserDefaults 观察键的变化?
【发布时间】:2011-12-10 07:10:48
【问题描述】:

以前有人问过这个问题,但没有明确的答案,也许一年后发生了一些变化。

我的 Android 应用程序能够观察对首选项所做的更改,并将适当的更改传播到应用程序的所有部分。

我知道 Objective-C 对 Key-Value Observing 有很好的支持。是否可以观察到 Objective-C 中偏好的变化?我能: 为 NSUserDefaults 创建一个外观:

定义某个“Preferences”类,

为我感兴趣的每个用户默认设置一个属性,

注册对变化感兴趣的类以观察属性的变化

通过“首选项”类设置用户默认值

每次设置默认值时将属性值更改为默认值

并以这种方式使用 KVO。

有没有更简单的方法?这似乎是一场维护噩梦。

谢谢!

【问题讨论】:

    标签: objective-c nsuserdefaults ios5 key-value-observing


    【解决方案1】:

    在 MacOS 上,有 NSUserDefaultsController 来处理这个问题,但据我所知,这在 iOS 上不可用。

    看来您在这里唯一的办法是侦听非常粗粒度的 NSUserDefaultsDidChangeNotification,然后根据用户默认值重新填充所有内容。否则,是的,您必须保留旧状态的副本并提供自定义代码以针对每个差异发送键值更改通知。有点拖累。

    这很不幸;我知道 iOS 不支持 Cocoa 绑定,但我仍然可以看到 NSUserDefaultsController 的用途。

    我的原帖:

    据我了解,单独的 NSUserDefaults 不是 Key-Value Observable,而是使用 NSNotification 来通知侦听器有关更改。如果你想 KVO 用户默认值,你会想使用 NSUserDefaultsController。

    有什么你想做而 NSUserDefaultsController 没有启用的吗?你为什么要为此创建自己的课程?

    【讨论】:

    • NSUserDefaultsController 在 iOS 上不可用。
    • 啊……我的错;那真不幸。 :(
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2012-08-05
    • 2010-11-09
    • 2018-02-26
    相关资源
    最近更新 更多