Core data 为什么可以';不能删除,但可以添加到CoreData?

Core data 为什么可以';不能删除,但可以添加到CoreData?,core-data,swift3,Core Data,Swift3,以下代码将项目保存到CoreData: var elements:[Elements] elements = try managedObjectContext.fetch(itemsFetch) as! [Elements] do { elements.append(el) try managedObjectContext.save() } catch let error as NSError { print("F

以下代码将项目保存到CoreData:

    var elements:[Elements]
    elements = try managedObjectContext.fetch(itemsFetch) as! [Elements]

    do {
        elements.append(el)
        try managedObjectContext.save()
    } catch let error as NSError {
        print("Failed to save an element", error)
    }
以下内容确实删除了一个元素。我在调试器中看到元素计数下降了1

    elements.remove(at: 5)
    do {
        try managedObjectContext.save()
    } catch {
        fatalError("Error deleting element")
    }

但当我停止应用程序并重新启动时,旧元素又回来了。知道我做错了什么吗?

第一个示例将元素附加到数据源数组中。该项通过
NSEntityDescription.insertNewObject(forEntityName:into
其他地方添加到核心数据中

同样,您必须从数据源阵列和核心数据中删除元素

let elementToRemove = elements[5]
managedObjectContext.delete(elementToRemove)
elements.remove(at: 5)
您可以尝试以下代码:

var elements: [NSManagedObject] = []
//Delete from core data
func tableView(_ tableView: UITableView, commit editingStyle: 
  UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    let context = (UIApplication.shared.delegate as! 
  AppDelegate).persistentContainer.viewContext
 if editingStyle == .delete {
   let element = elements[indexPath.row]
   context.delete(element)
  (UIApplication.shared.delegate as! AppDelegate).saveContext()
 do {
   elements = try context.fetch(YOUR_ENTITY_NAME.fetchRequest())
} catch {
   print(error)
  }
}
    tableView.reloadData()
    }

我认为这是不对的。您应该只能使用数组,只需调用managedObjectContext.save()操作数组后。这是正确的。
元素
数组与核心数据不同步。@4thface这是正确的。如果您认为可以以不同的方式进行操作,那么数组应该是同步的。这就是使用数组的全部意义。我在OP中添加了一些额外的代码来显示这一点。另外,为什么
managedObjectContext.add()
调用数组
append()
工作所需的调用。
append()
code as is工作正常。相信我,它不是。您需要数组,因为核心数据在内部使用
Set
来存储数据。在
fetch
之后调用
save
没有用,因为fetch不会更改数据库。什么是
managedObjectContext.add()
?在
NSManagedObjectContext
类中没有
add
API。