行删除不会更新表视图

时间:2017-07-09 19:19:11

标签: ios uitableview swift3 realm

我正在将数据加载到UITableViewController中,数据来自Realm。所以我在ViewController上有一个属性:var nextWeekPlants: Results<Plant>!

变量在我编写的nextWeekPlants = realm.objects(Plant.self).filter("...")方法中加载如下:updateUI()updateUI()方法也会调用tableView.reloadData()

在我的numberOfRowsInSection委托方法中,我有这个检查:

if let plants = nextWeekPlants {
    return plants.count
} else {
    return 0
}

好吧,它可以很好地收集数据,在屏幕上显示它,但是一旦我从表视图中删除1个工厂并想要删除另一个:它崩溃了。 'RLMException', reason: 'Index 1 is out of bounds (must be less than 1)'

我以这种方式删除了一个植物:

tableView.beginUpdates()
do {
    self.realm.beginWrite()
    self.realm.delete(self.nextWeekPlants[indexPath.row])
    try self.realm.commitWrite()
} catch (let error) {
    print(error.localizedDescription)
}
tableView.deleteRows(at: [indexPath], with: .left)
tableView.endUpdates()

它删除了一个植物就好了,但它没有删除另一个植物。我是否必须以不同的方式更新tableView(可能会调用updateUI()?)或者我是否需要更新我的Realm集合?

**编辑**

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Little hack to show no extra cells and to make sure the swiping works.
    self.tableView.allowsMultipleSelectionDuringEditing = false
    self.tableView.tableFooterView = UIView()

    updateUI()
}

func updateUI() {
    let calendar = Calendar.current
    let maxDate = calendar.date(byAdding: .day, value: 7, to: Date())

    if let nextWeek = maxDate {
         nextWeekPlants = realm.objects(Plant.self).filter("nextWater <= %@", nextWeek)
    }

    self.tableView.setEditing(false, animated: true)
    self.tableView.reloadData()
}

1 个答案:

答案 0 :(得分:0)

看起来你正在改变UITableView状态,而不让Realm了解它。请参阅Realm的文档的Interface-Driven Writes部分。

do {
    self.realm.beginWrite()
    self.realm.delete(self.nextWeekPlants[indexPath.row])
    tableView.deleteRows(at: [indexPath], with: .left)
    try self.realm.commitWrite(withoutNotifying: [token])
} catch (let error) {
    print(error.localizedDescription)
}