티스토리 뷰
오늘은 개발 중 발생했던 문제 상황에 대해 어떤 문제가 발생했고 어떻게 해결했는지 포스팅해보고자 한다!
📍 발생한 문제
메인 화면 -> 나의 소비내역 -> 내역 상세 보기 후 다시 메인화면으로 돌아왔을 때 나의 소비내역을 아무리 클릭해도 페이지가 이동하지 않는 문제가 있었다.
현재 문제가 발생한 버전은 시뮬레이터 iOS 15 17.5 버전이다.
메인 화면으로 돌아왔을 때 클릭해도 아무런 이벤트가 발생하지 않는다...
그래서 코드를 확인해보니까 NavigationLink로 잘 연결시켜주고 있고, 딱히 문제가 되는 부분이 없다!!!!!
그래서 테스트를 해봤다.
iOS 17.5 버전에 대해서만 그렇고, 17.4 이하 버전에 대해서 테스트해볼 수 있는 기기들에 한해 다 테스트를 해봤지만 iOS 17.5에서만
이 현상이 발생되었다.
아직도 원인을 잘 모르겠다. 17.5에서만 duplicated되는게 있는 걸까.? 아니면 17.5에서 버그가 생겼던 걸까!!!!
원인을 아신다면 댓글 부탁드려요..
아무튼 지금은 해결을 했다.
🥊 해결방법
.backgound()를 사용하여 background 내부에 NavigationLink를 위치시키는 것이었다!
즉 사용자가 "나의 소비내역"이라는 버튼을 클릭했을 때 $navigateToMySpendingList로 선언한 변수가 활성화되게 하였고, background안에 NavigationLink를 배치시켜 나의 소비내역에 해당하는 MySpendingListView를 EmptyView를 할당해 메인화면에서는 MySpendingListView를 숨겨놓은 것이다!
.background(
NavigationLink(destination: AddSpendingHistoryView(spendingHistoryViewModel: spendingHistoryViewModel, clickDate: $clickDate, isPresented: $navigateToAddSpendingHistory, entryPoint: .main), isActive: $navigateToAddSpendingHistory) {
EmptyView()
}
NavigationLink(destination: MySpendingListView(spendingHistoryViewModel: SpendingHistoryViewModel(), clickDate: $clickDate), isActive: $navigateToMySpendingList) {
EmptyView()
}
)
즉 위에 코드를 이렇게 배치하였더니 해결이 되었다.
이렇게 하면 다른 여러뷰를 거쳤다가 Main뷰로 다시 온 후 MySpendingListView를 다시 이동하려고 해도 전혀 문제가 되지 않는다.
한 가지 더 발생한 이슈는. background()는 iOS 15.0 이상의 버전에 대해서만 지원해주고 있는데, 우리 프로젝트에서의 iOS 최소 타깃은 14.0 이상부터였다.
근데 지금 문제는 17.5 버전에서만 문제가 발생하고 있기 때문에 딱히 문제가 될 건 없지만, background를 사용할 수 있는 iOS 15.0 버전 이상일 경우에. background 내부에 NavigationLink를 배치시켜주고, 15.0 이하일 경우에는 기존 코드 그대로 NavigationLink를 사용하도록 하는 과정이 필요할 거 같아 아래와 같이 구현해 주었다.
.background(
NavigationLink(destination: AddSpendingHistoryView(spendingHistoryViewModel: spendingHistoryViewModel, clickDate: $clickDate, isPresented: $navigateToAddSpendingHistory, entryPoint: .main), isActive: $navigateToAddSpendingHistory) {
EmptyView()
}
NavigationLink(destination: MySpendingListView(spendingHistoryViewModel: SpendingHistoryViewModel(), clickDate: $clickDate), isActive: $navigateToMySpendingList) {
EmptyView()
}
)
if #available(15.0, *) {
} else {
//iOS 15.0 이하일 경우
NavigationLink(destination: AddSpendingHistoryView(spendingHistoryViewModel: spendingHistoryViewModel, clickDate: $clickDate, isPresented: $navigateToAddSpendingHistory, entryPoint: .main), isActive: $navigateToAddSpendingHistory) {
EmptyView()
}
NavigationLink(destination: MySpendingListView(spendingHistoryViewModel: SpendingHistoryViewModel(), clickDate: $clickDate), isActive: $navigateToMySpendingList) {
EmptyView()
}
}
마무리
아직도 왜 17.5 버전에 대해서만 이런 문제가 발생한 건지 원인을 모르겠다 ㅠ...
이 이슈에 대해서 관심 있으신 분들이라면 아래 깃헙에서 코드를 보고 문제원인을 알려주세요..
pennyway-client-ios/pennyway-client-iOS/pennyway-client-iOS/View/TabView/SpendingManagementView/SpendingManagementMainView/Spend
🪙 Pennyway iOS Mobile Client. Contribute to CollaBu/pennyway-client-ios development by creating an account on GitHub.
github.com
아무튼 오늘도 이렇게 버그픽스를 해결했다는 것에 의의를 두자!!!
'iOS > SwiftUI' 카테고리의 다른 글
[iOS/SwiftUI] Debounce 사용해보기 (0) | 2024.08.25 |
---|---|
[iOS] 앨범/카메라 접근 권한 및 datepicker 연동 (0) | 2024.08.11 |
[iOS/SwiftUI] Custom Week Calendar 구현하기 (0) | 2024.07.27 |
[iOS/SwiftUI] ScrollViewReader를 사용해 스크롤링 감지하기 (0) | 2024.06.28 |
[iOS/SwiftUI] @EnvironmentObject로 전역 상태 관리하기 (0) | 2024.05.18 |
- Total
- Today
- Yesterday
- combine
- XCTest
- imagepicker
- 클로저
- closure
- 16173
- CoreData
- 스위프트
- Fastlane
- mlmodel
- Task
- SWIFT
- ios
- securefield
- wwdc25
- 병합충돌
- 코딩테스트
- swiftUI
- detached task
- unstructed task
- foundation models
- UIKit
- 프로그래머스
- mergeconflict
- rxswift
- Xcode
- asyne-let
- group tasks
- ObservableObject
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |