1. 문제 발생 현상
보라색 경고 발생, 앱 빌드는 되지만 앱이 실행되는 동안 계속 발생하며 경고 문구 count가 계속 증가합니다.
Accessing StateObject's object without being installed on a View. This will create a new instance each time.
struct HomeMyWallet: View {
@StateObject var studentAccountM: StudentAccountVM
@StateObject var studentChangeM: StudentChangeVM
init(api_url: String, studentIdStored: Int, studentAccountM: StudentAccountVM, studentChangeM: StudentChangeVM) {
self._studentAccountM = StateObject(wrappedValue: studentAccountM)
self._studentChangeM = StateObject(wrappedValue: studentChangeM)
self.loadStudentAccountData()
}
func loadStudentAccountData() {
studentAccountM.getData(completion: {data in
DispatchQueue.main.async {
self.studentAccountM.studentAccount = data
}
})
}
var body: some View {
...
}
}
2. 문제 원인
이 오류는 StateObject가 뷰에 설치되지 않은 상태에서 해당 객체에 접근하려고 시도할 때 발생합니다. StateObject는 SwiftUI의 뷰 수명주기에 따라 생성되므로, 뷰가 화면에 나타나기 전에 StateObject의 인스턴스에 접근하면 새로운 인스턴스가 매번 생성되기 때문에 발생합니다.
3. 해결 방법
필자의 경우 StateObject를 꼭 사용해야하는 상황이 아니었기에 ObservedObject로 변경해주었습니다.
struct HomeMyWallet: View {
@ObservedObject var studentAccountM: StudentAccountVM
@ObservedObject var studentChangeM: StudentChangeVM
init(api_url: String, studentIdStored: Int, studentAccountM: StudentAccountVM, studentChangeM: StudentChangeVM) {
self.studentAccountM = studentAccountM
self.studentChangeM = studentChangeM
self.loadStudentAccountData()
}
func loadStudentAccountData() {
studentAccountM.getData(completion: {data in
DispatchQueue.main.async {
self.studentAccountM.studentAccount = data
}
})
}
var body: some View {
...
}
}
'Development > iOS' 카테고리의 다른 글
[XCode] 앱 이름 변경하는 방법 (0) | 2023.04.24 |
---|---|
[SwiftUI] 굴곡 있는 사각형 예제 (Rounded Ractangle with outline) (0) | 2023.04.21 |
[Solved][xcode] Undefined symbol 오류 해결 방법 (0) | 2023.04.17 |
[SwiftUI] Toast Message 구현 예시 (0) | 2023.04.13 |
[SwiftUI] 검색창 만들기 기본 예제 (0) | 2023.04.06 |