将数组数组保存为用户默认值

Posted

技术标签:

【中文标题】将数组数组保存为用户默认值【英文标题】:Saving an array of arrays to user defaults 【发布时间】:2018-01-06 21:07:38 【问题描述】:

我可以使用以下方法将单个数组保存到用户默认值:

var array = [0,0,0]

defaults.set(array, forKey: "SavedArray") //saves array

array = defaults.object(forKey: "SavedArray") as? [Int] ?? [Int]()

但它不会让我保存数组数组,我正在尝试这个:

arrayOfArrays = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

defaults.set(arrayOfArrays, forKey: "SavedArrayOfArrays") //saves array

arrayOfArrays = [defaults.object(forKey: "SavedArrayOfArrays") as? Array<Int> ?? Array<Int>()] //loads array

它会导致在数组“[[]]”中加载一个空数组,并且不会将数组列表保存在数组中。

【问题讨论】:

【参考方案1】:

首先,密钥不匹配。您为键 SavedArrayOfArrays 保存数组,但为 arrayOfArrays 加载它

其次,嵌套数组的类型是[[Int]]Array&lt;Array&lt;Int&gt;&gt;,而不是[Int]Array&lt;Int&gt;

终于UserDefaults得到了一个专门的方法来加载数组

let arrayOfArrays = defaults.array(forKey: "SavedArrayOfArrays") as? [[Int]]

【讨论】:

在用户默认值中添加对象数组时尝试插入非属性列表对象错误 @ShivamPokhriyal 默认情况下,您无法将自定义类/结构保存到 UserDefaults 有没有办法做到这一点?就像我必须在 userDefaults 中保存一个结构数组 @ShivamPokhriyal 这超出了这个问题的范围。请search【参考方案2】:

试试这个

 arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [[Int]] 

或者你可以这样做

arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [Array<Int>] 

【讨论】:

UserDefaults 有一个特定的方法来加载数组defaults.array(forKey: "arrayOfArrays") as? [[Int]] 我同意这是另一种选择【参考方案3】:

谢谢大家!

我尝试按照大家的建议在末尾使用 [[Int]] 保存它,然后 xcode 让我将其切换到 [[Int]])!并且成功了!

arrayOfArrays = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

defaults.set(arrayOfArrays, forKey: "SavedArrayOfArrays") //saves array

arrayOfArrays = (defaults.array(forKey: "SavedArrayOfArrays") as? [[Int]])! //loads array

【讨论】:

不要发布您自己的答案,而是接受最能解决您的问题的其他答案之一(单击答案左侧的复选标记)。

以上是关于将数组数组保存为用户默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何从图像文字数组中选择单个图像并将其保存为swift 5中的用户默认值

在应用加载时保存为用户默认值

如何在swift中将json数组保存和检索到用户默认值?

如何保存响应 JSON 数组并在 swift 中使用用户默认值进行检索

带有 NSDictionary 的数组不想保存到 standardUserDefaults

Vue:为数组属性设置默认值的最佳方法?