ios - 无法在 NSUserDefaults 中设置数组

标签 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 并且包含上面示例中附加的元素。 reportWeekReport 类型。

最佳答案

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/

相关文章:

ios - 全屏模糊 View

ios - 突出显示时 UIButton 周围不需要的不可见检测区域

c - 尝试构建一个接收 char 数组的函数并查看它是否是有效状态

javascript - 如何使用javascript中不同数组集中的键映射数组对象

ios - presentationNode 的位置正在重置

swift - Xcode 10 中图像资源的本地化

ios - 如何在没有 prepareForSegue 的情况下在 Swift 文件之间传递数据?

c - 如何在循环中使用 scanf 来获取 c 中的 char* 数组

swift - uitableViewCell 图像属性在选择时重置 - swift

iOS JPEG 图像旋转 90 度