簡體   English   中英

使用 RXSwift 觀察 contentSize 時檢測到重入異常

[英]Reentrancy anomaly was detected when observing contentSize with RXSwift

對於 RXSwift 的表視圖,我有以下設置:

override func viewDidLoad() {
    super.viewDidLoad()

    // Constraints setup etc
    
    items
        .subscribeOn(MainScheduler.instance)
        .bind(to: tableView.rx.items(cellType: SomeCell.self)) { [weak self] row, item, cell in
            // Code
        }
        .disposed(by: bag)

    // Observe the contentSize of tableView to update PanModal's height.
    tableView.rx.observe(CGRect.self, "contentSize")
        .subscribeOn(MainScheduler.instance)
        .subscribe(onNext: { [weak self] _ in
            // Code
        })
        .disposed(by: bag)
}

似乎因為我使用RXSwift訂閱了contentSize ,我現在收到以下錯誤:

⚠️ 檢測到重入異常。 調試:要調試此問題,您可以在 /Users/kekearif/Documents/Snapask/ios-app/Pods/RxSwift/RxSwift/Rx.swift:96 中設置斷點並觀察調用堆棧。 問題:這種行為破壞了可觀察序列語法。 next (error | completed)? 這種行為破壞了語法,因為序列事件之間存在重疊。 可觀察序列試圖在前一個事件的發送完成之前發送一個事件。 解釋:這可能意味着您的代碼中存在某種意外的循環依賴,或者系統未按預期方式運行。 補救措施:如果這是預期的行為,則可以通過添加.observeOn(MainScheduler.asyncInstance)或以其他方式將序列事件排入隊列來抑制此消息。

有沒有人見過這個? 任何想法可能導致此錯誤? 我嘗試按照它的建議添加.observeOn(MainScheduler.asyncInstance) ,當我呈現視圖 controller 時,UI 就會鎖定。

任何有關如何解決此問題的建議將不勝感激!

這不是因為您訂閱了contentSize ,請注意您發布的代碼不會導致異常; 這是因為您在訂閱(或綁定)中所做的事情正在發生。

正如您收到的警告中所解釋的,“可觀察序列正在嘗試在前一個事件的發送完成之前發送一個事件。” 這通常是由程序員在綁定到主題的訂閱中的主題上發送 onNext 事件引起的。 在這種情況下,您可能會從訂閱內部更改表視圖的 contentSize。 解決方案是不要那樣做。

解釋更多關於為什么你認為你需要這樣做,也許我可以告訴你一個更好的方法。

暫無
暫無

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

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