从CoreData删除字符串

时间:2018-11-03 19:17:02

标签: swift uitableview core-data

我在从核心数据中删除项目时遇到了问题,并且查看了许多其他示例和问题-他们都说要删除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")
    }
}

1 个答案:

答案 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
    }
}