【问题标题】:Specifically detailing what defaults have changed on NSUserDefaultsDidChangeNotification特别详细说明在 NSUserDefaultsDidChangeNotification 上更改了哪些默认值
【发布时间】:2011-09-09 10:08:23
【问题描述】:

我开始进入 NSUserDefaults 的内部密室,现在我可以使用提供的选择器和 NSNotification 对象作为参数成功拦截 NSUserDefaultsDidChangeNotification 通知。但是,返回的 NSNotification 对象并没有像我预期的那样出现。

我所期待的是:

1) 从通知中心接收 NSUserDefaultsDidChangeNotification。

2) 查询返回的提供的 NSNotification 对象以获取包含至少一个键/值对的用户信息,其中 key="当您睡着时,以下默认值已更改" 和 object="已采用新值的应用程序键的 NSArray"。

我得到的是:

1) 同上

2) 用户信息=无! (有谁知道为什么......?)

我的应用委托是 NSUserDefaultsDidChangeNotification 的注册响应者,因此会将更改分发给任何需要了解其设置不同的对象。在我开始编写自己的代码以检测哪些键受到用户默认值更改的影响之前,任何人都可以建议我吗? (a) 是否必须自己确定发生了哪些变化——或者我是否遗漏了一些非常明显的东西? (b) 任何人都可以指出一些文档(开发文档除外!),其中提供了如何以 Apple 批准的方式处理 NSUserDefaultsDidChangeNotification 的示例?如果可能的话,我渴望不要重新发明轮子。我已经丢弃了返回的 NSNotification 对象的 dictionaryRepresentation ——但很明显,它也包含 Apple 自己的所有键/值。 再次感谢,提前。 V.V.

【问题讨论】:

    标签: nsuserdefaults nsnotifications


    【解决方案1】:

    您可以使用 KVO(键值编码) 来跟踪 NSUserDefaults 中的特定键。 使用代码 sn-ps 在此处查看我的答案:https://stackoverflow.com/a/10950217/388412

    您可以注册以观察 NSUserDefaults standardUserDefaults 对象的特定键的键值更改,而不是在 NSNotificationCenter 中注册为任何 NSUserDefaultsDidChangeNotifications 的一般观察者。

    【讨论】:

      【解决方案2】:

      查看 Apple 的文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

      最后有一个通知部分,其中指出:

      NSUserDefaultsDidChangeNotification 当对持久域中的默认值进行更改时,将发布此通知。 通知对象是 NSUserDefaults 对象。此通知不包含 userInfo 字典。

      因此,NIL userInfo 字典是 Apple 做出的选择。如果你真的想要这个功能,我建议你通过http://bugreport.apple.com/向Apple提交评论

      我最终通过编写一些逻辑来解决这个问题,将通知中的设置与我加载的设置进行比较,让我知道哪些设置发生了变化。

      【讨论】:

        猜你喜欢
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多