我使用用户默认添加了一个作业页面。 Null 值也添加到 tableView 和删除功能不起作用。
按钮 Action
@IBAction func addHomeWork(_ sender: Any) {
let newHomeWork = HomeWork(addtitle:addHomeworktxt.text!)
HomeWork.saveHomeWork(homeWork: newHomeWork)
}
viewWillAppear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
if let arrayDetails = HomeWork.getHomeWork() {
homeWorkArray = arrayDetails
}
}
编辑风格
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCell.EditingStyle.delete {
homeWorkArray.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
self.tableView.reloadData()
HomeWork.getHomeWork()
}
}
模型类家庭作业
class HomeWork: Codable {
var title:String
init(addtitle:String) {
self.title = addtitle}
public static func getHomeWork() -> [HomeWork]? {
var homeWorkArray:[HomeWork] = []
if let homeWorkData = UserDefaults.standard.data(forKey: "homeworkData"){
homeWorkArray = try! JSONDecoder().decode([HomeWork].self, from: homeWorkData)
}
return homeWorkArray
}
HomeWork 模型类中的 saveHomeWork 方法
public static func saveHomeWork(homeWork:HomeWork){
var retrivedHomeWorkArray:[HomeWork] = []
if let homeWorkData = UserDefaults.standard.data(forKey: "homeworkData"){
retrivedHomeWorkArray = try! JSONDecoder().decode([HomeWork].self, from: homeWorkData)
}
if retrivedHomeWorkArray.count == 0 {
var homeWorkArray = [HomeWork]()
homeWorkArray.append(homeWork)
let homeWorkDat = try! JSONEncoder().encode(homeWorkArray)
UserDefaults.standard.set(homeWorkDat, forKey: "homeworkData")
}else{
retrivedHomeWorkArray.append(homeWork)
let homeWorkDat = try! JSONEncoder().encode(retrivedHomeWorkArray)
UserDefaults.standard.set(homeWorkDat, forKey: "homeworkData") } }}
最佳答案
当你删除时,你不会改变保存的数组
homeWorkArray.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
self.tableView.reloadData()
HomeWork.getHomeWork()
所以考虑添加一个像这样重新保存当前数组的函数
public static func reSave(homeWorks:[HomeWork]){
let homeWorkDat = try! JSONEncoder().encode(homeWorks)
UserDefaults.standard.set(homeWorkDat, forKey: "homeworkData")
}
然后将上面的代码替换为
homeWorkArray.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
HomeWork.reSave(homeWorks:homeWorkArray)
关于ios - 如何删除tableView中的用户默认数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56439514/