我可以使用以下方法将单个数组保存到用户默认值:
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
导致在数组中加载一个空数组&#34; [[]]&#34;并且不保存数组中的数组列表。
答案 0 :(得分:4)
首先,存在一个关键的不匹配。您为密钥SavedArrayOfArrays
保存了数组,但为arrayOfArrays
其次,嵌套数组的类型为[[Int]]
或Array<Array<Int>>
,而不是[Int]
或Array<Int>
最后,UserDefaults
有一个加载数组的专用方法
let arrayOfArrays = defaults.array(forKey: "SavedArrayOfArrays") as? [[Int]]
答案 1 :(得分:1)
试试这个
arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [[Int]]
或者你可以这样做
arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [Array<Int>]
答案 2 :(得分:0)
全部谢谢!
我试着用[[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