无法在NSUserDefaults中设置数组

时间:2014-08-03 17:52:35

标签: ios arrays swift nsuserdefaults

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

1 个答案:

答案 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,以便将其转换为数据。