当我删除具有核心数据的单元格时,同一单元格显示两次

时间:2017-02-24 05:44:04

标签: ios swift xcode uitableview core-data

当我删除具有Core数据的单元格时,我遇到了一个问题。 当我在单元格之间删除时,删除单元格的下一个单元格在下一个单元格后变得它看起来像下面。 enter image description here

它看起来像。当我外出并返回表视图时,它被正确删除。 但是,当我删除最后一个单元格时,它看起来不错。它运作良好!它不会发生这种情况(删除最后一个单元格)!

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {
        //FIXME: Delete 
        let quote:Quotes = quotes![indexPath.row]
        self.context.delete(quote)

        do {
            try self.context.save()
            self.quotes?.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)

        } catch let error {
            print(error)
        }
    }
}

func controllerWillChangeContent(controller: NSFetchedResultsController<NSFetchRequestResult>) {
        self.tableview.beginUpdates()
    }

func controllerDidChangeContent(controller: NSFetchedResultsController<NSFetchRequestResult>) {
        self.tableview.endUpdates()
    }

我不知道有什么不对,请告诉我这种情况:(

我的模拟器是v10.1,Xcode版本是8.2.1

1 个答案:

答案 0 :(得分:0)

问题是细胞高度。与屏幕高度相比,单元高度太大。 当我改变细胞高度时,效果很好。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {    
    return 20 //before: view.frame.width 
}

但是,我想研究形状细胞。所以,我在顶部添加了刷新控制器。

var refreshControl: UIRefreshControl!
override func viewDidLoad() {
    super.viewDidLoad()
    refreshControl = UIRefreshControl()
    refreshControl.tintColor = UIColor(red: 0.996, green: 0.878, blue: 0.196, alpha: 1.00)
    refreshControl.addTarget(self, action: #selector(self.refresh), for: UIControlEvents.valueChanged)
    tableview.addSubview(refreshControl)
}
func refresh() {
    self.tableview.reloadData()
    self.refreshControl?.endRefreshing()
}

这不是完美的答案,但它可能是第二好的政策。如果你有更好的方式,请发表评论:-)