본문 바로가기

iOS/Trouble Shooting

Xcode @Environment 관련 "Preview Crashed: Fatal Error in Environment+Objects.swift" 에러 해결법

 

 

 ⛈️ 문제 상황

struct ContentView: View {
	@State var myViewModel = MyViewModel()
    
    var body: some View {
    	MyView()
        	.environmemt(myViewModel)
	}
}

 

위와 같이 @Observable이 적용된 MyViewModel을 MyView의 environment로 등록하고 나서 아래와 같이 LoginView의 하위 스택들에서 @Environment로 MyViewModel을 불러오면 프리뷰에서 에러가 발생한다. (시뮬레이터는 정상 작동)

 

struct MyView: View {
	@Environment(MyViewModel.self) var myViewModel
    
    var body: some View {
    	@Bindable var myViewModel = myViewModel
        ...
	}
}

 

 

 

 ☀️ 해결법

프리뷰의 관점으로는 environment로 등록한 MyViewModel는 존재하지 않아서 접근할 수 없으므로, 아래와 같이 프리뷰에도 마찬가지로 MyViewModel 객체를 environment로 등록하면 해결된다.

 

#Preview {
	MyView()
    	.environment(MyViewModel())
}