在我的场景中,我需要将array
值存储到UserDefault
中并检索相同的数据。当用户再次打开特定的viewcontroller
时,检索数据需要加载到同一数组中。下面是我正在尝试的代码。我不知道如何以适当的方式将数组输出值下面的store
和retrieve
转换为UserDefaults。请帮助我。
将数据存储到阵列
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.tableView.deselectRow(at: indexPath, animated: true)
let item = searching ? filteredData[indexPath.row] : membersData[indexPath.row]
if let cell = tableView.cellForRow(at: indexPath) {
if cell.accessoryType == .checkmark {
cell.accessoryType = .none
// UnCheckmark cell JSON data Remove from array
self.selectedRows = selectedRows.filter{$0 != indexPath.row}
self.selectedValues.remove(item) // Here Data Removing Into Array
} else {
cell.accessoryType = .checkmark
// Checkmark selected data Insert into array
self.selectedRows.append(indexPath.row) //select
self.selectedValues.insert(item) // Here Data Storing Into Array
}
}
}
将数组数据保存到UserDefault
@IBAction func doneAction(_ sender: Any) {
// Selected Row Index Store
UserDefaults.standard.set(selectedRows, forKey: "SelectedIndexes")
// Here need to store Selected values
self.dismiss(animated: true, completion: nil)
}
将UserDefault存储的数据重新加载到同一阵列(viewDidLoad)
self.selectedRows = UserDefaults.standard.value(forKey: "SelectedIndexes") as? [Int] ?? []
// Here how to retrieve SelectionValue and Load into `selectedValues` array
可编码
// MARK: - ListData
struct ListData: Codable, Hashable {
let userid: String?
let firstname, designation: String?
let profileimage: String?
var isSelected = false
private enum CodingKeys : String, CodingKey {
case userid, firstname, designation, profileimage
}
}
阵列数据
选择值:[ListData(userid:Optional(“ 1”),名字: 可选(“ abc”),名称:可选(“英语”),配置文件图片: 可选(“ url”)),ListData(用户ID: 可选(“ 2”),名字:可选(“ def”),名称: 可选(“数字”),个人资料图片: Optional(“ url”))]选择行:[0,1]
答案 0 :(得分:0)
如果不建议您将其存储在UserDefault中。
var selectedValues: [Any] = [["id": 1, "name": "Adam"]]
selectedValues.append(["id": 2, "name": "Eve"])
UserDefaults.standard.set(selectedValues, forKey: "SelectedValues")
let result = UserDefaults.standard.array(forKey: "SelectedValues") ?? []
print(result)
Output : [{
id = 1;
name = Adam;
}, {
id = 2;
name = Eve;
}]
答案 1 :(得分:0)
如果要在UserDefaults中保存列表,则只能在UserDefaults中使用Any
数据类型列表。首先,您应该将所选行保存在Any
数据类型列表中。
步骤1:将列表声明为Any
数据类型,并在其中添加选定的行数据。
var selectedValues: [Any]?
步骤2:在单独的类中创建一个变量,您的所有UserDefaults会将Any
数据类型列表保存在
//MARK: store selectedValues
private let KeySelectedValues = "KeySelectedIndexes"
fileprivate var _selectedValueList = [Any]()
var selectedValueList : [Any] {
get {
_selectedValueList = UserDefaults.standard.object(forKey: KeySelectedIndexes) as? [Any] ?? _selectedValueList
return _selectedValueList
}
set {
_selectedValueList = newValue
UserDefaults.standard.set(_selectedValueList, forKey: KeySelectedIndexes)
}
}
第3步:将列表保存在UserDefaults中,例如
classObj.selectedValueList = selectedValues
步骤4:要从UserDefaults检索数据列表
let _selectedValueList = classObj.selectedValueList
guard let selectedValueList:[YourSelectedRowModel] = Mapper<YourSelectedRowModel>().mapArray(JSONArray: _selectedValueList as! [[String : Any]]) else {
return
}