Swift 3删除已排序的表视图行并查找相应的coreData对象

时间:2017-06-27 09:29:48

标签: core-data

我确信这个问题有一个简单的解决方案,但到目前为止,在查看了许多存档问题之后我还没有找到它。我希望有人可以提供帮助,除了这个明显的问题,代码工作正常!

我有一个源自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)")
                        }
                }
        }

1 个答案:

答案 0 :(得分:0)

尝试使用NSFetchedResultsController获取对象,NSFetchedResultsController用于管理Core Data获取请求的结果并向用户显示数据。设置NSFetchedResultsController委托以在控制器中设置和实现NSFetchedResultsControllerDelegate所需的方法。

这里,要删除对象,请从上下文中删除对象。委托方法将负责显示用户数据。