如何使用FileManager永久删除Swift中的条目

时间:2019-07-09 09:07:20

标签: ios swift xcode

我是新手,很快就可以编程。我编写了一个应用程序,可以在其中向表视图添加一些元素。我通过FileManager在模拟器iPhone上保存了数据。现在,我想从表格视图中永久删除一个元素。

我使用了一种称为commit editStyle的方法来删除表视图中的一行。这是可行的,但是如果我重新启动应用程序,则该元素仍然存在。

//create the file 
let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("Item.plist")
//delete the file 
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
            if editingStyle == UITableViewCell.EditingStyle.delete {
                itemArray.remove(at: indexPath.row)
                tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
            }
        }

1 个答案:

答案 0 :(得分:0)

这是要添加新项目

@IBAction func addNewToDoItem(_ sender: UIBarButtonItem) {
var textField = UITextField()

let alert = UIAlertController(title: "Neues Todo", message: "", preferredStyle: .alert)

let action = UIAlertAction(title: "ToDo hinzufügen", style: .default) { (action) in

    // Item was der Nutzer ertsellen wird
    let itemObject = Item(title: textField.text!)       // hinzufügen, das was der Nutzer ins Textfield eingibt
    self.itemArray.append(itemObject)

    // Daten dauerhaft speichern
    self.saveItems()
    self.tableView.reloadData()
}

let cancelAction = UIAlertAction(title: "Abbrechen", style: .default) { (cancelAction) in
    // Abbrechen
}

alert.addTextField { (alertTextField) in
    alertTextField.placeholder = "Todo eintragen"
    textField = alertTextField
}
alert.addAction(action)
alert.addAction(cancelAction)
present(alert, animated: true, completion: nil)

}

安全数据:

func saveItems() {

let encoder = PropertyListEncoder()

do {
    let data = try encoder.encode(itemArray)
    try data.write(to: dataFilePath!)
} catch {
    print("Fehler beim schreiben der Dateien", error)
}

}

这是我的itemArray和他自己的类:

var itemArray = [Item]()

class Item: Codable {       // Aus Encodable und Decodable wird Codable

var title : String = ""
var done : Bool = false

init(title : String) {
    self.title = title
}

init(title: String, done: Bool) {
    self.title = title
    self.done = done
}

}