var arr = defaults.arrayForKey("kWeeks") as [WeekReport]?
if arr? {
var arr2 = arr!
arr2.append(report)
defaults.setObject(arr2, forKey: "kWeeks") // Crash
defaults.synchronize()
}
我尝试设置 arr2
,它将在可选检查后添加。但它在 setObject()
上崩溃并出现错误:EXC_BAD_ACCESS
我检查过,println()
和 arr2
不是 nil 并且包含上面示例中附加的元素。 report
是 WeekReport
类型。
最佳答案
var arr = defaults.arrayForKey("kWeeks") as [WeekReport]?
正在强制转换为可选的 WeekReport
数组。相反,你真的想做一个可选的转换:
if let arr = defaults.arrayForKey("kWeeks") as? [WeekReport] {
arr.append(report)
defaults.setObject(arr, forKey: "kWeeks")
defaults.synchronize()
}
这是说,“如果有一个可以转换为 WeekReport
数组的“kWeeks”数组,请将其作为 arr
执行以下操作”
您还需要确保 WeekReport
继承自 NSCoding protocol以便它可以转换为数据。
关于ios - 无法在 NSUserDefaults 中设置数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107460/