簡體   English   中英

SwiftUI EnvironmentObject 與 View 不同步

[英]SwiftUI EnvironmentObject out of sync with View

舉一個簡單的例子來說明我在做什么,我有一個環境對象:

class ViewModel: ObservableObject {
   @Published var x: CGFloat = 0
   @Published var y: CGFloat = 0
}

正在觀察這些數字以調整其偏移量的視圖:

struct PrimaryView: View {
    @EnvironmentObject var model: ViewModel

// inside the view struct

    SomeView()
        .offset(x: model.x, y: model.y)
}

另一個負責更改這些數字的視圖:

struct ChangeView: View {
    @EnvironmentObject var model: ViewModel

// inside the view

    Button(action: {
               switch directionCondition {
                    case .up:
                        model.y += 10
                    case .down:
                        model.y -= 10
                    case .left:
                        model.x += 10
                    case .right:
                        model.x -= 10

           }) // end button here for brevity

當我的應用程序加載時,有時它可以完美運行,而有時按下按鈕時根本不會觸發,然后當您再次點擊它時它會觸發。

這是我迄今為止嘗試過的。 我將更改放在視圖模型中,只調用導致ChangeView更改的ChangeView 我使用DispatchQueue異步調度這些更改。 我從按鈕中刪除了 switch 語句並手動進行了這些更改。 最后,我將這些突變放回視圖中,看看這是否對性能產生了影響。

這些都不起作用,所以我開始覺得這可能是蘋果方面的一個錯誤,但我也可能做一些完全不正確的事情。 另外,環境對象已正確附加到App.Swift的應用程序根目錄。

我從EnvironmentObject切換到ObservedObject並將后續代碼移動到我需要它的每個視圖中,現在一切正常。 我的猜測是環境對象在初始加載時可能會不同步。 至於為什么或如何我不確定。

暫無
暫無

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

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