InsertRow with NSFetchedResultsControllerdelegate

时间:2017-05-16 13:02:55

标签: uitableview core-data swift3

这应该是微不足道的,但我无法让它发挥作用。

我想在NSFetchedResultsControllerDelegate中的UITableView中移动一行。

我可以轻松删除行,但插入似乎不起作用(NSInternalInconsistencyException)。

我正在尝试

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let destinationindex = IndexPath(item: 0, section: 0)
    tableView.deleteRows(at: [indexPath], with: .fade)
    tableView.insertRows(at: [destinationindex], with: .fade)
}

我也试过

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let delobject = fetchedResultsController?.object(at: indexPath)
    fetchedResultsController?.managedObjectContext.delete(delobject!)
    fetchedResultsController?.managedObjectContext.insert(delobject!)
}

当然简单的删除工作;例如,滑动删除:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        if (indexPath.row != 0) {
            let delobject = fetchedResultsController?.object(at: indexPath)
            fetchedResultsController?.managedObjectContext.delete(delobject!)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的数据模型必须符合tableView,因此数据中的项目数等于tableView中的行数。

基于FetchedResultsController的{​​{1}}反映了CoreData抓取请求的结果。在TableView中插入行意味着在CoreData中插入新条目。

这就是你想要做的:在Core Data中创建一个新条目(就像删除一行时一样)。