ios - 如何删除tableView中的用户默认数据?

标签 ios swift uitableview nsuserdefaults

我使用用户默认添加了一个作业页面。 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/

相关文章:

ios - 表更新时 NSFetchedResultsController 无法滚动

ios - 在 TableView 单元格选择上打开 URL(RSS 阅读器)

ios - AVCaptureSession 隐藏 Storyboard中的按钮

ios - 拍照导致应用程序崩溃,但没有错误消息

ios - 如何在 ios Swift 中禁用一个特定的 tableView 单元格

iphone - 将图像分配给 UIImageView 对象后如何刷新 View ?

ios - iOS/UIKit 是否内置了对 dinging 之类的调度滚动的支持

ios - 在 Swift 3 中调用 flashScrollIndicators() 时如何更改滚动条的颜色

ios - 将字符串显示为带两位小数的数字

ios - 如何知道 UIButton titlerable.text 是否改变