簡體   English   中英

從TableView刪除行時出錯(快速)

[英]Error when Removing Row from TableView (Swift)

我想從表格視圖中刪除一行,但是它不起作用:/

下一個代碼塊是通過自定義按鈕(而不是內部Apple-Table-Edit)觸發的。

self.tableView.beginUpdates()
self.sections[indexPath.section].items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()

這是一個部分的樣子:

class Section: Comparable {
    var state: TrackingObject.stateEnum
    var items: [TrackingObject]
    var expanded: Bool

    init(state : TrackingObject.stateEnum, items : [TrackingObject], expanded : Bool){
        self.state = state
        self.items = items
        self.expanded = expanded
    }

    static func group(trackingObjects: [TrackingObject]) -> [Section] {
        let groups = Dictionary(grouping: Model.trackingObjects) { (trackingObject: TrackingObject) -> TrackingObject.stateEnum in
            return trackingObject.currentState
        }
        return groups.map { (state: TrackingObject.stateEnum, trackingObjects: [TrackingObject]) in
            return Section(state: state, items: trackingObjects, expanded: state == .active_due ? true : false)
        }.sorted()
    }
}

預期:給定indexPath的行通過動畫以及在“數據源”中被刪除(稱為:self.sections)

實際輸出:錯誤消息:

由於未捕獲的異常“ NSInternalInconsistencyException”而終止應用程序,原因:“試圖將第2行插入第0節,但更新后第0節只有0行”

(我正在刪除第0部分的第二行)

self.sections[indexPath.section].items.remove(at: indexPath.row)
    self.tableView.beginUpdates()
    DispatchQueue.main.async {
        tableView.deleteRows(at: [indexPath], with: .automatic)
        self.tableView.endUpdates()
    }

嘗試在beginUpdates()之前從數據源中刪除項目。 您還可以從數據源中刪除項目,然后將動畫選項設置為自動,從而重新加載表格視圖,因此表格視圖將執行首選的動畫。

暫無
暫無

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

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