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
。
答案 0 :(得分:0)
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()
}
这说,"如果有一个数组用于" kWeeks"可以强制转换为WeekReport
数组,使用arr
"
您还需要确保WeekReport
继承NSCoding protocol,以便将其转换为数据。