删除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()
}
}
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])
}
}
答案 0 :(得分:1)
由于您填写表格视图的数据源数组是myData
,因此您似乎需要在重新加载表格视图之前调用save()
方法 viewWillAppear(_:)生命周期方法中的{table.reloadData()
}:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// ...
save()
myTableView.reloadData()
// ...
}
此外,(显然)确保myData
数据源包含已保存的所需数据。
但是,我建议在离开第二个视图控制器之前保存数据,可能viewWillDisappear(_:)可能是一个好地方;通过应用此功能,无需再在第一个视图控制器中调用save()
,您只需重新加载表视图即可。这更合乎逻辑,因为第一个视图控制器应该显示已保存的数据,但不保存它,它应该在你要添加数据的第二个视图控制器中。