ios - 调用 awakeFromNib 时,UserDefaults 返回 0 个元素

标签 ios swift nsuserdefaults

我在 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/

相关文章:

ios - 以正确的方式读取和写入 Firebase 规则

ios - 像表格一样显示具有动态大小的标签,但不重叠

iphone - UserDefaults 线程安全吗

ios - indexPathForSelectedRow 返回意外的 nil

ios - "Bad Realm file header (#1)"iOS打开Realm文件异常

ios - CLGeocoder 错误 EXC_BAD_INSTRUCTION

ios - Swift Youtube 框架委托(delegate)方法未触发

ios - 解除 UISearchBar 键盘后取消按钮消失

ios - 如何在 NSUserDefaults 中存储自定义对象

objective-c - 如何知道双击标题栏时窗口是否最小化?