我在从核心数据中删除项目时遇到了问题,并且查看了许多其他示例和问题-他们都说要删除indexPath.row
,而我正在尝试删除{ {1}}(是String
)。
var itemsArray = [String]()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
我将在以下函数中添加什么?
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete) {
}
}
在Core Data中加载项目
func loadItems() {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Items")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
if results.count > 0 {
for result in results as! [NSManagedObject] {
if let product = result.value(forKey: "product") as? String {
self.itemsArray.append(product)
}
}
}
} catch {
print("Error")
}
}
答案 0 :(得分:1)
要删除该对象,您必须使用NSManagedObject
作为数据源
var itemsArray = [Items]()
loadItems
可以简化为
func loadItems() throws {
let request = NSFetchRequest<Items>(entityName: "Items")
request.returnsObjectsAsFaults = false
itemsArray = try context.fetch(request)
}
在do - catch
调用周围放置loadItems()
块并打印error
实例,而不是无意义的文字字符串。
在cellForRow
中使用
let item = itemArray[indexPath.row]
let product = item.product
要删除该项目,您必须将其从数据源中删除,然后在上下文中删除该项目,然后保存上下文:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let objectToDelete = itemArray[indexPath.row]
itemArray.remove(at: indexPath.row)
context.delete(objectToDelete)
// here add code to save the context
self.tableView.deleteRows(at: [indexPath], with: .fade) // and you have to update the table view
}
}