gpt4 book ai didi

ios - 如何一键删除coreData和Tableview中的数据?

转载 作者:行者123 更新时间:2023-11-29 05:42:05 24 4
gpt4 key购买 nike

我实际上正在做一个食谱应用程序,我已经做了持久数据来将我的成分保存在列表中,但是当我想用我的按钮删除我的成分时,它第一次起作用,但当我重新启动时又回来了应用程序。

这是我的代码:

class AddIngredientController: UIViewController, ShowAlert {

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var ingredientsTableView: UITableView!

var itemArrayIngredient = [Item]()

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

override func viewDidLoad() {
super.viewDidLoad()
let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
print(dataFilePath)
loadItems()
}

func saveItems() {
do {
try context.save()
} catch {
print("Error saving context \(error)")
}
}

func loadItems(with request: NSFetchRequest<Item> = Item.fetchRequest()) {
do {
itemArrayIngredient = try context.fetch(request)
} catch {
print("Error fetching data from context \(error)")
}
}

@IBAction func clearButton(_ sender: UIButton) {
context.delete() //Here the problem
itemArrayIngredient.removeAll()
saveItems()
ingredientsTableView.reloadData()
}

@IBAction func addButton(_ sender: UIButton) {
if textField.text!.isEmpty {
showAlert(title: "No Ingredients", message: "Please, add some ingredients to your list.")
} else {
newIngredientAdded()
}
}

func newIngredientAdded() {
let newItem = Item(context: context)
newItem.title = textField.text!
itemArrayIngredient.append(newItem)
saveItems()
ingredientsTableView.reloadData()
textField.text! = ""
}
}

extension AddIngredientController: UITableViewDataSource, UITableViewDelegate {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemArrayIngredient.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "customSearchCell", for: indexPath)
let item = itemArrayIngredient[indexPath.row]
cell.textLabel?.text = item.title
cell.textLabel?.textColor = UIColor.white
cell.textLabel?.font = UIFont(name: "Marker Felt", size: 19)
return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
saveItems()
tableView.deselectRow(at: indexPath, animated: true)
}
}

最佳答案

context.delete必须用参数来调用。例如

@IBAction func clearButton(_ sender: UIButton) {
itemArrayIngredient.forEach { context.delete($0) }
itemArrayIngredient.removeAll()
saveItems()
ingredientsTableView.reloadData()
}

关于ios - 如何一键删除coreData和Tableview中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com