UserDefaults возвращает значение по умолчанию или ноль, когда недоступен? - PullRequest
0 голосов
/ 16 января 2020

Я работаю в проекте iOS, который сталкивается с проблемами доступа к значению UserDefaults при включенной защите файлов. В сообществах Apple есть пара сообщений, касающихся UserDefaults проблемы недоступности. Вот некоторые из обсуждений:

  1. UserDefault Получение NULL
  2. NSUserDefault потеряно

Это меня это очень расстраивает, поскольку мое приложение проверяло логическое значение ключа FirstTimeAppLaunched и основывалось на значении, которое он воссоздает db encryption password для моей базы данных. Из-за вышеупомянутых проблем, когда UserDefault становится недоступным, мое приложение заново создает новый пароль и в конечном итоге теряет все данные, ранее использовавшиеся пользователями с использованием другого пароля.

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

UserDefaults.standard.register(["FirstTimeAppLaunched", 0]);

при запуске приложения. И после первого запуска я установил его на 1, используя

UserDefaults.standard.set(1, forKey: "FirstTimeAppLaunched");

. В этом случае мне нужно подтвердить около

, если стандарт UserDefault недоступен из-за вышеизложенного В упомянутых проблемах гарантируется, что возвращаемое значение для ключа FirstTimeAppLaunched будет NULL или значение по умолчанию, которое я зарегистрировал с помощью метода UserDefaults.standard.register?

1 Ответ

1 голос
/ 16 января 2020

Существует разница между скалярными типами (Bool, Int, Double) и объектами.

Значения по умолчанию:

  • Ключ пары / значения не зарегистрированы

    • Объекты nil,
    • Скалярные типы false, 0, 0.0, если вы используете bool(forKey, integer(forKey и double(forKey.
  • Пары ключ / значение зарегистрированы

    • Зарегистрированное значение возвращается до тех пор, пока значение перезаписывается.

В вашем случае вы можете использовать незарегистрированное значение Bool, если вы используете bool(forKey для его чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...