Swift 3 UserDefaults не сохраняет

Совершенно озадачен, почему приведенный ниже код не сохраняется правильно. Я просмотрел и распечатал каждую переменную индивидуально, чтобы убедиться, что у всех есть данные, и вплоть до latestBottle все в порядке. Но когда я пытаюсь вернуть значение из UserDefaults, оно 0.0.

func saveBottleEntry() {
    let allBottleEntries = realm.objects(SubmittedEntry.self).filter("bottleQuantity > 0")
    for bottle in allBottleEntries {
        bottleTimes.append(bottle.submissionTime!)
    }
    latestBottle = bottleTimes.max()!
    UserDefaults.standard.set(latestBottle, forKey: "latestBottle")
    print(UserDefaults.standard.double(forKey: "latestBottle"))
}

bottleTimes - это массив дат, извлекаемый из базы данных Realm. Затем я беру самую новую дату bottleTimes.max() и сохраняю ее в UserDefaults.


person FasterThanLlamas    schedule 24.08.2017    source источник
comment
Userdefaults не сохраняются сразу, но для принудительного использования вам нужно использовать UserDefaults.standard.syncronize() после установки   -  person    schedule 24.08.2017
comment
Ваш вопрос непонятен. Показывает ли оператор print в опубликованном вами коде правильное значение? Если да, то обновите свой вопрос, указав подробную информацию о коде, который не работает.   -  person rmaddy    schedule 24.08.2017
comment
@Masiama, без изменений при добавлении этого.   -  person FasterThanLlamas    schedule 24.08.2017
comment
@rmaddy, print для меня, чтобы проверить, сохранен он или нет. Всегда возвращает 0.0   -  person FasterThanLlamas    schedule 24.08.2017
comment
@FasterThanLlamas, если вы видите 0.0 при попытке удвоить, это означает, что вы написали неправильный тип   -  person    schedule 24.08.2017
comment
Покажите декларацию для bottleTimes и latestBottle. А в чем ценность latestBottle?   -  person rmaddy    schedule 24.08.2017
comment
@FasterThanLlamas какой тип latestBottle?   -  person    schedule 24.08.2017
comment
@masiama отличный улов. Поменял на UserDefaults.standard.object, и он работал отлично. Спасибо всем!   -  person FasterThanLlamas    schedule 24.08.2017
comment
@masiama Если вы хотите опубликовать ответ, я буду рад отметить его.   -  person FasterThanLlamas    schedule 24.08.2017
comment
@FasterThanLlamas Это действительно поможет, если вы разместите детали запроса.   -  person rmaddy    schedule 24.08.2017
comment
Если latestBottle - это Date, почему вы пытаетесь прочитать его как Double, а не как Date?   -  person rmaddy    schedule 24.08.2017


Ответы (1)


Если вы видите 0.0 при попытке удвоить, это означает, что вы указали неправильный тип в UserDefaults

person Community    schedule 24.08.2017
comment
Или это означает, что было сохранено значение 0,0. Этого недостаточно для диагностики проблемы. - person rmaddy; 24.08.2017
comment
@rmaddy но как я понял это было не то, что хранилось - person ; 24.08.2017
comment
Если OP ответит на комментарии и опубликует более подробную информацию о задействованных типах данных, можно будет опубликовать более подробный ответ и решение. Но, как правило, чтение значения 0,0 не гарантирует, что был написан неправильный тип. Хотя в данном случае это, безусловно, вероятно. - person rmaddy; 24.08.2017
comment
это было только мое предположение и оно оказалось верным - person ; 24.08.2017
comment
Теперь, когда мы знаем, что OP писал Date и пытался прочитать Double, можно опубликовать более полный ответ. - person rmaddy; 24.08.2017
comment
Что ж, решать тебе. - person ; 24.08.2017