我确信这个问题有一个简单的解决方案,但到目前为止,在查看了许多存档问题之后我还没有找到它。我希望有人可以提供帮助,除了这个明显的问题,代码工作正常!
我有一个源自coreData的数据表,它根据特定字段(不是唯一的)排序。我想邀请用户通过向左滑动并点击删除来删除单个表格行。然后我想更新表并删除相应的coreData对象。问题是要删除的正确coreData对象不是表中刷过的行的index.row,因为表已经排序,但coreData对象在输入时仍保持排序。我想添加一个coreData属性是一个唯一的数字系列,我可以用来从索引行中识别对象,但我想知道是否有更好的解决方案。我删除表行的代码如下。
从表
中删除数据行 override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let request: NSFetchRequest<Game> = NSFetchRequest(entityName: "Game")
if let entry = try? managedObjectContext.fetch(request) as [Game] {
managedObjectContext.delete(entry[indexPath.row])
print("coredata row deleted = ", indexPath.row)
do {
try managedObjectContext.save()
gameRefArray.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: .automatic)
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
}
答案 0 :(得分:0)
尝试使用NSFetchedResultsController获取对象,NSFetchedResultsController用于管理Core Data获取请求的结果并向用户显示数据。设置NSFetchedResultsController委托以在控制器中设置和实现NSFetchedResultsControllerDelegate所需的方法。
这里,要删除对象,请从上下文中删除对象。委托方法将负责显示用户数据。