У меня есть приложение для iOS, разработанное с использованием Microsoft Xamarin, поэтому часть этого кода может выглядеть иначе.В любом случае вот что я пытаюсь сделать:
В моем приложении у меня есть набор пользовательских настроек по умолчанию, которые должны быть в каждом отдельном экземпляре приложения, несмотря ни на что.Это устанавливается с помощью этого метода:
public static void SetDefaults()
{
var keys = new object[]
{
"LastNotificationTime",
"LastSyncTime",
"LunchStartTime",
"LunchEndTime",
"OnLunchBreak",
"PunchedIn",
"PunchTime",
"ShowDetailPane",
"NotifyEmergency",
"RunAtBoot",
"RowsPerPage",
"SyncInterval"
};
var values = new object[]
{
"",
"",
"",
"",
false,
false,
"",
true,
true,
false,
5,
60
};
var defaults = NSDictionary.FromObjectsAndKeys(values, keys);
NSUserDefaults.StandardUserDefaults.RegisterDefaults(defaults);
NSUserDefaults.StandardUserDefaults.Synchronize();
}
Это прекрасно работает во время первоначального запуска моего приложения.Я буду развертывать на своем устройстве с нуля, запускать приложение и затем останавливаться.Затем я повторно разверну уже установленное приложение.Я не хочу стирать значения по умолчанию и каждый раз устанавливать значения по умолчанию, поэтому я выполняю эту проверку перед этим (в этом примере Settings.GetPreferences()
возвращает объект NSUserDefaults.StandardUserDefaults
):
if( Settings.GetPreferences().IntForKey("RowsPerPage") == 0 ||
Settings.GetPreferences().IntForKey("RowsPerPage") == null )
{
Settings.SetDefaults();
}
Как вы можете видеть выше, RowsPerPage изначально установлен на 5. Я ожидаю, что это значение для каждого запуска после последующей начальной установки будет сохраняться равным 5. Или что бы то ни было, выбираемое пользователем, в этом отношении.
Однако вышеупомянутая проверка всегда оказывается верной, и вызывается мой метод SetDefaults()
, удаляющий все изменения, внесенные пользователем в значения по умолчанию во время последнего запуска.Кто-нибудь знает, почему это происходит?Я делаю что-то не так при установке этих значений по умолчанию?Даже после добавления не рекомендуемого устаревшего вызова метода NSUserDefaults.StandardUserDefaults.Synchronize()
значения по умолчанию все еще сбрасываются.