Ios 表视图中的数据已删除(Swift)
删除TableView中的数据(Swift) 我有一个应用程序代码“Notes” 但有时仅删除表中的数据。 我怎样才能解决这个问题 如果向后滚动页面,数据将被删除 **我用于保存和加载数据:**Ios 表视图中的数据已删除(Swift),ios,swift,xcode,Ios,Swift,Xcode,删除TableView中的数据(Swift) 我有一个应用程序代码“Notes” 但有时仅删除表中的数据。 我怎样才能解决这个问题 如果向后滚动页面,数据将被删除 **我用于保存和加载数据:** func save() { UserDefaults.standard.set(myData, forKey: "notes") UserDefaults.standard.synchronize() } func load(){ if let loadData = UserDefaul
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()
}
}
视图控制器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])
}
}
由于从中填充表视图的数据源数组是
myData
,因此在生命周期方法中重新加载表视图(table.reloadData()
)之前,似乎需要调用save()
方法:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// ...
save()
myTableView.reloadData()
// ...
}
另外,(显然)确保myData
数据源包含保存的所需数据
然而,我建议在离开第二个视图控制器之前保存数据,这可能是一个好地方;通过应用此方法,不再需要在第一个视图控制器中调用
save()
,只需重新加载表视图。这将更符合逻辑,因为第一个视图控制器应该显示保存的数据,但不保存它,它应该在您添加数据的第二个视图控制器中。当视图重新出现时(视图将出现
在返回时被调用)selectedRow
的值是多少?不相关但从不使用值(forKey:
从UserDefaults
获取字符串数组。有一种专门的方法stringArray(forKey:
我同意@vadian的优点:)你能详细描述一下用什么写的吗,但我不太明白(您无法理解的部分是什么?我建议您在返回包含表视图的第一个视图控制器之前保存数据,等等。问题是:您在返回到第一个视图控制器之前正在保存数据,您应该做的是在返回前保存数据,而是将其保存到第二个视图控制器中,即更符合逻辑。