Я делаю приложение с одним представлением, которое управляет всеми задачами, над которыми я работаю. У меня есть два массива: один, в котором хранятся все имена задач, а второй показывает время завершения задач. Я назначаю оба из них UserDefaults:
var tasks = [String]()
var finishingDates = [DateComponents]()
let defaults = UserDefaults()
class ViewController: UIViewController {
func setDefaults() {
defaults.set(tasks, forKey: "tasks")
defaults.set(finishingDates, forKey: "finishingDates")
}
override func viewDidLoad() {
super.viewDidLoad()
tasks = defaults.stringArray(forKey: "tasks") ?? [String]()
finishingDates = defaults.array(forKey: "finishingDates") as? [DateComponents] ?? [DateComponents]()
}
}
Затем я проверяю, работают ли массивы:
tasks = ["task"]
finishingDates = [DateComponents(calendar: calendar, year: 1910, month: 10, day: 1)]
setDefaults()
Однако, когда я его запускаю, приложение вылетает. В делегате приложения есть ошибка SIGABRT.
Я добавляю точку останова исключения, и она вызывается в этой строке:
defaults.set(finishingDates, forKey: "finishingDates")
Он вызывается только в этой строке, а не в строке, которая устанавливает массив String. В остальном массивы идентичны. Как я могу это решить?
DateComponents
вUserDefaults
. Это не массив, словарь, строка, дата, число или данные. Это единственные типы, которые вы можете хранить. - person rmaddy   schedule 14.07.2019