You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
이는 RootView를 바꿔주는 과정에서 enviornmetObject를 다시 주입해주지 않았기 때문에 AppState에 접근할 수 없기 때문이다.
따라서, UIKit 방식의 RootView Change를 시도하는 경우에는 UIHostingViewController에 다시 .enviornmentObject() 메서드를 통해서 사용할 ObservableObject를 다시 주입해주거나, SwiftUI 방식의 Group을 통해서 변경해주어야 한다.
2) EnviornmentObject를 통한 DI는 어디까지 전파될까?
지금부터 예시로 사용한 프로젝트만 보면 DI랑 무슨 관계가 있나 싶을 수 있지만 현재 Clean-Architecture 예제의 DI를 EnvrionmentObject를 통해서 하고 있기 때문에 동일한 내용이다!
위와 같은 ObservableObject를 EnvironmentObject로 사용하면 AppState는 어디까지 전파될까?
RootView - TestView - TestView2
는 navigation push로 스택이 쌓이는 형태이고RootView - ContentView
는 UIKit 방식의 RootViewController를 바꿔주고 있다TestView에서 EnvironmentObject의 count 프로퍼티값을 증가시키고 TestView2로 화면전환를 한 경우, 정상적으로 증가된 Count값을 확인할 수 있다. (EnviornmentObject에 접근가능)
하지만 해당 동작 이후, RootView에서 ContentView로 화면 전환을 시도하면 앱이 Crash가 나는것을 확인할 수 있다.
이는 RootView를 바꿔주는 과정에서 enviornmetObject를 다시 주입해주지 않았기 때문에 AppState에 접근할 수 없기 때문이다.
따라서, UIKit 방식의 RootView Change를 시도하는 경우에는 UIHostingViewController에 다시
.enviornmentObject()
메서드를 통해서 사용할 ObservableObject를 다시 주입해주거나, SwiftUI 방식의 Group을 통해서 변경해주어야 한다.프로젝트는 여기서 확인할 수 있습니다
The text was updated successfully, but these errors were encountered: