Я пытаюсь сохранить логическое значение в UserDefault в быстром режиме. поэтому, когда я устанавливаю значение в userDefault, моя следующая инструкция — переключиться на контроллер представления и закрыть текущий контроллер представления.
Итак, что происходит сейчас, иногда userDefault сохраняет значение в БД, а иногда нет. Я читаю документацию Apple https://developer.apple.com/documentation/foundation/userdefaults а> и обнаружил, что
Во время выполнения вы используете объекты UserDefaults для чтения значений по умолчанию, которые использует ваше приложение, из пользовательской базы данных по умолчанию. UserDefaults кэширует информацию, чтобы не открывать базу данных пользователя по умолчанию каждый раз, когда вам нужно значение по умолчанию. Когда вы устанавливаете значение по умолчанию, оно изменяется синхронно в вашем процессе и асинхронно в постоянном хранилище и других процессах.
так, я предполагаю, потому что в самой следующей строке я открываю новый контроллер и закрываю текущий, из-за чего возникает несогласованность.
вот мой код
func setWalkthroughShown(completionHandler: @escaping ()->()) {
UserDefaults.standard.set(true, forKey: isWalkthroughCompleted)
UserDefaults.standard.synchronize()
completionHandler()
}
Я даже вызвал UserDefaults.standard.synchronize(), чтобы операция стала синхронной. хотя в документации явно написано не использовать эту функцию. может кто-нибудь, пожалуйста, направьте меня, где я ошибаюсь? как я могу сохранить во всех местах перед закрытием текущего процесса?
это функция, с помощью которой я получаю значение
func isWalkthroughShown() -> Bool {
return UserDefaults.standard.bool(forKey: isWalkthroughCompleted)
}
здесь isWalkthroughCompleted - это строка, и вы можете видеть, что я использую одну и ту же строку для сохранения и извлечения значения.
.set
на самом деле не работает во всех случаях. Я бы проверил, что это с точками останова или операторами регистрации. - person Rob Napier   schedule 28.01.2021deinit
). Я бы начал с доказательства того, что вызываетсяsetWalkthroughShown
, а затем доказывал, что после этого вызываетсяisWalkthroughShown
и получает неправильное значение. (И что ничто другое никогда не устанавливает это значение!) - person Rob Napier   schedule 28.01.2021