Как узнать, когда пользователь внес изменения в пакет настроек

StackOverflow https://stackoverflow.com/questions/5482573

  •  14-11-2019
  •  | 
  •  

Вопрос

Я разрешаю пользователю вносить изменения в свои настройки в области настроек iphone.Во время следующей сетевой синхронизации я хотел бы отправить пользовательские изменения на сервер.Но только в том случае, если будут внесены изменения.

Но как мне узнать, когда пользователь внес изменения в области настроек?

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

Есть ли хороший и элегантный способ решения этой проблемы?Спасибо вам за вашу помощь!

Прошла неделя, а ответов все нет...Этот вопрос слишком сложный или в нем вообще нет никакого смысла?

Это было полезно?

Решение

Ах, какая я глупая!Здесь мы переходим к элегантному способу.Найдите AppPrefs в документации Apple в XCode, и там будет показан пример приложения, которое делает именно то, что вы хотите сделать.Просто скомпилируйте и запустите!В нем используются Примечание NSUserDefaultsDidChangeNotification.

Это код, используемый для регистрации наблюдателя:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(defaultsChanged:)
                                             name:NSUserDefaultsDidChangeNotification
                                           object:nil];

Старый ответ:

Не похоже, что вы могли бы получить дату изменения из NSUserDefaults.Пока я могу думать только об этом:

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults];
    [yetAnotherInstance saveModified]
}

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

Другие советы

Не то, чтобы вопрос слишком тяжело, это просто, что нет простого способа сделать то, что вы спрашиваете.NsuserDefaults не записывает «последнюю модифицированную» дату для настроек каждого приложения, по крайней мере, насколько я могу сказать, поэтому, если пользователь меняет некоторые настройки, используя приложение настроек, нет хорошего способа обнаружить это, кроме, чем смотреть навсе настройки.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top