TableView中的数据被删除(Swift)

时间:2017-12-23 15:32:44

标签: ios swift xcode

删除TableView中的数据(Swift)

我的应用程序代码为“注释”。

但有时候表格中的数据只会被删除。

我该如何解决这个问题?

如果您向后滚动页面,数据将被删除

**我用来保存和加载数据:**

func save() {
  UserDefaults.standard.set(myData, forKey: "notes")
  UserDefaults.standard.synchronize()
}
func load(){
    if let loadData = UserDefaults.standard.value(forKey: "notes") as? [String] {
        myData = loadData
        table.reloadData()
    }
}

gif

ViewController 1

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var table: UITableView!
var myData: [String] = []
var selectedRow: Int = -1
var newRowText:String = ""
var detailView: DetailViewController!
override func viewDidLoad() {
    super.viewDidLoad()
    load()
}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if selectedRow == -1 {
        return
    }
    myData[selectedRow] = newRowText
    if newRowText == "" {
        myData.remove(at: selectedRow)
    }
    table.reloadData()
    save()
}
@objc func AddNewNotes(){
    if table.isEditing{
        return
    }
    let name:String = ""
    myData.insert(name, at: 0)
    let indexPath: IndexPath = IndexPath(row: 0, section: 0)
    table.insertRows(at: [indexPath], with: .automatic)
    table.selectRow(at: indexPath, animated: true, scrollPosition: .none)
    self.performSegue(withIdentifier: "detail", sender: nil )
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return myData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")!
    cell.textLabel?.text = myData[indexPath.row]
    return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let detailView:DetailViewController = segue.destination as!DetailViewController
    selectedRow = table.indexPathForSelectedRow!.row
    detailView.masterView = self
    detailView.setText(t: myData[selectedRow])
}
}

1 个答案:

答案 0 :(得分:1)

由于您填写表格视图的数据源数组是myData,因此您似乎需要在重新加载表格视图之前调用save()方法 viewWillAppear(_:)生命周期方法中的{table.reloadData()}:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // ...
    save()
    myTableView.reloadData()
    // ...
}

此外,(显然)确保myData数据源包含已保存的所需数据。

但是,我建议在离开第二个视图控制器之前保存数据,可能viewWillDisappear(_:)可能是一个好地方;通过应用此功能,无需再在第一个视图控制器中调用save(),您只需重新加载表视图即可。这更合乎逻辑,因为第一个视图控制器应该显示已保存的数据,但不保存它,它应该在你要添加数据的第二个视图控制器中。