Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 表视图中的数据已删除(Swift)_Ios_Swift_Xcode - Fatal编程技术网

Ios 表视图中的数据已删除(Swift)

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

删除TableView中的数据(Swift)

我有一个应用程序代码“Notes

但有时仅删除表中的数据。

我怎样才能解决这个问题

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

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

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的优点:)你能详细描述一下用什么写的吗,但我不太明白(您无法理解的部分是什么?我建议您在返回包含表视图的第一个视图控制器之前保存数据,等等。问题是:您在返回到第一个视图控制器之前正在保存数据,您应该做的是在返回前保存数据,而是将其保存到第二个视图控制器中,即更符合逻辑。