Наблюдение за изменениями отдельных настроек в NSUserDefaults - PullRequest
4 голосов
/ 06 ноября 2011

Я хотел бы наблюдать за изменениями значений настроек в [NSUserDefaults standardDefaults]. Я использую InAppSettingsKit для доступа и изменения настроек в программе. До сих пор я только предполагал, что все значения изменились, и отправлял уведомления всем наблюдателям для обновления на основе новых значений. Это неэффективно, и я хочу отправлять уведомления наблюдателям только тогда, когда произошло соответствующее изменение.

Может кто-нибудь предложить эффективный способ сделать это?

Могу ли я предположить, что значение для любого ключа из [NSUserDefaults standardDefaults] никогда не является массивом, набором или словарем? (Работа с настройками является новой для меня. Это, вероятно, помогло бы, если бы мне пришлось выполнять сканирование методом грубой силы на предмет изменений, сравнивая предыдущий словарь с последующим словарем. И это не потребовало бы никакой рекурсии.)

Если это уже есть в InAppSettingsKit, я его не видел, и я был бы рад, если бы кто-то мог указать на это.

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Нет системного уведомления, содержащего сведения о том, какое значение по умолчанию было изменено. Я не могу говорить о наборе inappsettings, поскольку я не использовал его.

Ваши отдельные объекты, которые реагируют на изменения, должны содержать локальные значения для соответствующих настроек по умолчанию и выполнять дорогостоящие операции только в случае необходимости. Поэтому реагирование на уведомление должно быть простой операцией. Если у вас есть два отдельных объекта, которые реагируют на разные подобъекты в пределах одного ключа по умолчанию, вы можете переосмыслить, как организованы ваши значения по умолчанию. Если у вас есть конкретные примеры, пожалуйста, включите их в свой вопрос.

Перед тем как переписать все приложение, чтобы иметь какой-то объект диспетчера настроек по умолчанию под именем «эффективность», проведите тест, чтобы убедиться, что вы действительно тратите значительное время на взаимодействие с пользователем, когда множество объектов реагируют на уведомление. иначе вы преждевременно оптимизируете и знаете, что они говорят по этому поводу.

Отвечая на вторую часть вашего вопроса, вы не можете сделать такое предположение. Любые объекты списка свойств могут быть сохранены в пользовательских значениях по умолчанию.

0 голосов
/ 06 ноября 2011

Привязка еще не доступна в iOS.

...