Core data 为什么可以';不能删除,但可以添加到CoreData?
以下代码将项目保存到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
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。