我在 UITableViewCell
中有一个 UICollectionView
并且我正在使用 UserDefaults 将所选项目的数组保存在 didSelectItem
函数中以保持选中状态解除它们的父 View Controller 后的状态:
var arrSelectedIndex = [IndexPath]()
let encodedData = NSKeyedArchiver.archivedData(withRootObject: arrSelectedIndex)
UserDefaults.standard.set(encodedData, forKey: "arrayOfSelectedItem")
UserDefaults.standard.synchronize()
每当我显示 View Controller 时,我都会在 awakeFromNib 中再次使用 UserDefaults 设置我的数组:
arrSelectedIndex = UserDefaults.standard.array(forKey: "arrayOfSelectedItem") as? [IndexPath] ?? [IndexPath]()
但是我的数组和 UserDefaults 都返回 0 个元素(我试图打印出 arrSelectedIndex 和 UserDefaults.standard.array(forKey: "arrayOfSelectedItem") 的值 as? [IndexPath] ?? [IndexPath]()
) 并且它们都是 0,即使它们在选择项目时有数据。 awakeFromNib 是否会重置其中的所有内容?
最佳答案
问题是这一行:
UserDefaults.standard.array(forKey: "arrayOfSelectedItem") as? [IndexPath]
那会失败,因为你在那个键下保存的不是数组。这是您之前所说的:
let encodedData = NSKeyedArchiver.archivedData(withRootObject: arrSelectedIndex)
UserDefaults.standard.set(encodedData, forKey: "arrayOfSelectedItem")
你保存的是encodedData
。它不是数组。它是一个数据。该数组在其中编码。
关于ios - 调用 awakeFromNib 时,UserDefaults 返回 0 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539519/