Я пытаюсь запретить доступ к определенному контроллеру представления, если userDefault пуст, но код не работает. Чтобы быть более ясным, я сохраняю список избранного в userDefault. Это мой код:
if UserDefaults.standard.array(forKey: "favorites") == nil {
navigationController?.popToRootViewController(animated: true)
return
}
Ошибка «Индекс вне диапазона», что означает, что весь блок игнорируется (код после этого блока запускается, и, поскольку пользовательское значение по умолчанию пусто, происходит сбой при попытке получить информацию, которой нет).
Самое смешное, что код работает при первой попытке войти в viewController (он запрещает мне доступ). Но если я помечаю объект как избранный (сохраняю в userDefault), затем удаляю этот объект из избранного (userDefault становится пустым) и вхожу в viewController, программа вылетает.
Я пытался:
if let favExist = UserDefaults.standard.array(forKey: "favorites") {
print("")
print("FAV EXISTS")
print("")
}else {
print("")
print("NOPE")
print("")
navigationController?.popToRootViewController(animated: true)
return
}
... и та же проблема сохраняется. В print() журнал сообщает мне, что ИЗБРАННОЕ СУЩЕСТВУЕТ после того, как я отмечу избранное, затем отметлю неизбранное, а затем попытаюсь получить доступ к странице (даже если userDefault теперь должен быть пустым).
Я также пробовал код из других потоков. Предлагаемый код для решения моей проблемы из другого потока:
let defaults = UserDefaults.standard
if (!defaults.bool(forKey: "favorites")) {
defaults.set(true, forKey: "favorites")
}
Я не совсем уверен, как это реализовать? Где я могу это использовать? И что он делает?
Есть идеи, что случилось?
if UserDefaults.standard.array(forKey: "favorites") != nil {
? если корневому контроллеру нужен этот массив, хранящийся в пользовательских настройках по умолчанию, вы должны проверить, что он НЕ равен нулю - person Leo Dabus   schedule 21.10.2017for index in yourArray.indices {
или проверьте, содержит ли array.indices индекс, прежде чем подписывать ваш массив этим индексом - person Leo Dabus   schedule 22.10.2017