Я пытаюсь сохранить и загрузить объект из постоянного хранилища в Xcode 8.0 с помощью Swift.Как декодировать Double с помощью NSCoder, NSObject и Swift 3 для iOS
Я следовал за уроком Start Developing iOS Apps (Swift): Jump Right In от Apple и имел ту же проблему с целым значением для рейтинга звезды.
Это «обрезанные» версия моего класса «Расхода», чтобы показать переменную «количество», которые у меня возникают проблемы с:
class Expense: NSObject, NSCoding {
var amount: Double
static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("expenses")
struct PropertyKey {
static let amountKey = "amount"
}
func encode(with aCoder: NSCoder) {
aCoder.encode(amount, forKey:PropertyKey.amountKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let amount = aDecoder.decodeObject(forKey: PropertyKey.amountKey) as! Double
self.init(date: date, amount: amount, description: description, image: image)
}
}
Когда я запустить симулятор и он пытается загрузить в «сумма» я получаю следующее исключение: «фатальная ошибка: неожиданно найденная nil при развертывании необязательного значения». Я очень новичок в Swift и xCode, и я действительно не знаю, как это исправить.
let amount = aDecoder.decodeDouble (forKey: PropertyKey.amountKey) как Double? для обеспечения безопасности, не забудьте указать «количество» как необязательное (добавление в виде двойного?) Swift 3 –
где «требуется удобство init? (Coder aDecoder: NSCoder) {' метод заканчивается? –
@ Ахмад спасибо, что сработало. Можете ли вы отправить свой комментарий в качестве ответа, чтобы я мог «принять» его :) – Frederik