티스토리 뷰
SwiftUI로 프로젝트를 하다 보면 프리뷰에 이런 게 뜨면서 경고창이 나오고, 실행이 안될 때가 있다.
SwiftUI의 제일 큰 장점이 Preview 기능이라 생각하는데 이 기능이 Preview Crashed 되면서 뜨면 정말 답답하게 느껴진다.
여러 가지 원인이 있겠지만 내가 프로젝트 개발 중 경험했던 원인과 해결법에 대해 작성해보고자 한다.
LoginView
└─ LoginFormView
└─ LoginFormViewModel
문제가 발생했던 뷰의 디렉토리 구조는 위와 같이 구성하였다.
최상단 View는 LoginView이고 입력폼, 로그인 버튼 등 입력 폼과 버튼을 관리하는 View는 LoginFormView에 따로 관리하였다.
원인
나는 하위 뷰에서 객체를 사용하고 최상위 뷰에서 객체를 사용하지 않기 때문에 EnvironmentObject를 사용하지 않았는데
그래서 발생한 문제였다.
찾아보니 MVVM 패턴으로에서 EnvironmentObject 를 적용하려 할 때 Preview Crashed가 발생하는게 제일 자주 발생하는 원인이라고 한다.
해결방법
데이터 바인딩을 할 때 preview 환경에서 필요한 설정값이 누락되어 잘못 설정한 경우 .environmentObject, .environment 등을 통해 데이터를 전달하도록 해야 한다.
ViewModel을 구성하고 다른 뷰에서 ObservedObject를 통해 값을 할당해주며, 최상단 뷰에서는 @StateObject를 통해 생성해준 ViewModel을 관찰하도록 지정해주어야 한다.
즉, 하위 뷰에서 ViewModel로 객체를 사용하고 최상위뷰에서 EnvironmentObject를 적용해주지 않으면 Preview Crashed가 발생한다.
'iOS > SwiftUI' 카테고리의 다른 글
[iOS/SwiftUI] SecureField 사용시 Strong Password (0) | 2024.04.22 |
---|---|
[iOS/SwiftUI] SwiftUI 에서 LifeCycle 관리 (0) | 2024.04.05 |
[iOS/SwiftUI] DatePicker를 이용한 TaskEditor 만들기 (1) | 2024.02.29 |
[iOS/SwiftUI] LazyVGrid를 활용하여 뷰 만들기 (1) | 2024.02.25 |
[iOS/SwiftUI] List를 활용한 TodoList 만들기 (1) | 2024.02.07 |
- Total
- Today
- Yesterday
- 프로그래머스
- ios
- 백준
- Fastlane
- closure
- 코딩테스트
- imagepicker
- ObservableObject
- 스위프트
- 둘만의 암호
- swiftUI
- CoreData
- mlmodel
- Xcode
- rxswift
- MainActor
- CustomCalendar
- combine
- UIKit
- XCTest
- ScrollViewReader
- securefield
- 클로저
- 가장가까운같은글자
- 16173
- SWIFT
- pbxproj
- LazyVGrid
- mergeconflict
- 병합충돌
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |