簡體   English   中英

行刪除不會更新表視圖

[英]Row deletion doesn't update table view

我正在將數據加載到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()也許調用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()
}

看起來您是在不通知Realm的情況下更改UITableView狀態。 請參考Realm文檔的“ 接口驅動的寫入”部分。

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM