【发布时间】:2019-07-13 22:46:39
【问题描述】:
我正在制作一个单视图应用程序,用于管理一个人处理的所有任务。我有两个数组:一个存储所有任务名称,一个显示任务的完成时间。我将这两个都分配给 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")
它只在这一行被调用,而不是在设置字符串数组的那一行。除此之外,阵列是相同的。我该如何解决这个问题?
【问题讨论】:
-
您不能将
DateComponents存储在UserDefaults中。它不是数组、字典、字符串、日期、数字或数据。这些是您可以存储的唯一类型。 -
我使用了一个 DateComponents 数组。这应该有效吗?
-
否,因为 DateComponents 不在列表中。
标签: swift userdefaults