iOS5 NSUserDefaults Наблюдать за изменениями ключа? - PullRequest
1 голос
/ 18 октября 2011

Об этом уже спрашивали, но однозначного ответа нет, может быть, что-то изменилось за год.

Мое приложение Android может отслеживать изменения, внесенные в настройки, и распространять соответствующие изменения во всех частях приложения.

Я знаю, что Objective-C имеет хорошую поддержку наблюдения значения ключа. Можно ли наблюдать изменения, внесенные в предпочтения в Objective-C? Я могу: создать фасад для NSUserDefaults:

определить определенный класс "Предпочтения",

реализовать свойство для каждого интересующего меня пользователя по умолчанию,

Регистрация классов, заинтересованных в изменениях, для наблюдения за изменениями в свойствах

установка пользовательских настроек по умолчанию с помощью класса «Предпочтения»

изменять значение свойства по умолчанию каждый раз, когда устанавливается значение по умолчанию

и используйте КВО таким образом.

Есть ли более простой способ? это похоже на кошмар обслуживания.

Спасибо!

1 Ответ

2 голосов
/ 19 октября 2011

В MacOS есть NSUserDefaultsController, чтобы справиться с этим, но, как мне сообщили, его нет в iOS.

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

Это прискорбно; Я знаю, что iOS не поддерживает привязки Какао, но я все еще вижу варианты использования NSUserDefaultsController.

Мой оригинальный пост:

Насколько я понимаю, только NSUserDefaults не является Наблюдаемым значением ключа, но вместо этого использует NSNotification для уведомления слушателей об изменениях. Если вы хотите использовать KVO по умолчанию, вы можете использовать NSUserDefaultsController.

Есть ли что-то, что вы хотите сделать, чтобы NSUserDefaultsController не включался? Зачем вам делать свой собственный класс для этого?

...