티스토리 뷰
SwiftUI 에 NSInternalInconsistencyException 오류 해결 방법 - Attempted to scroll the collection view to an out-of-bounds item (0) when there are only 0 items in section 0.
미닉길 2023. 5. 18. 11:00안녕하세요. 도미닉입니다.
SwiftUI 로 첫 프로젝트를 완료해서 페이워치 리뉴얼 앱을 런칭했는데요.
거기서 겪었던 오류를 설명하고 해결책을 공유하고자 합니다.
오류 발견
크래쉬틱스에 아래와 같이 많은 오류가 발생했습니다.
고객센터로 들어온 문의를 보면 일부 유저에게 홈 화면에서 앱이 강제종료되는 문제가 있었습니다.
처음에는 크래쉬틱스에 있는 에러와 홈 화면에서 앱이 강제종료되는 이슈를 별개의 문제로 알았습니다.
크래쉬틱스의 자세한 내용을 살펴봐도 홈 화면과 연관성을 못 찾았기 때문입니다.
아래는 크래쉬틱스에 내용입니다.
오류 파악
SwiftUI로 앱을 개발했는데 왜 CollectionView 에 관한 오류가 발생할지 감조차 잡을 수 없었습니다.
같이 공부했던 친구에게 이 오류 캡쳐 화면을 보여주니 자신이 겪어봤던 내용이라고 했습니다.
iOS 16.0 ~ 16.0.2 에 TabView 에서 0개의 요소를 그려줄 때 발생하는 오류라고 하였습니다.
실제로 클레쉬틱스에 오류 기기를 확인해보니 iOS 16.0 ~ 16.0.2 에서만 발생되는 오류였습니다.
저희 앱에서 TabView 는 두 군데에 쓰이고 있었습니다.
하단 텝바와 홈 상단에 이벤트 베너입니다.
처음에는 하단 텝바를 의심했습니다. TabView 를 쓰는 곳 하니 가장 먼저 생각했던 뷰이기 때문입니다. 하지만 아래와 같이 하단 텝바에서는 요소가 0개가 될 수 없었습니다.
TabView 를 프로젝트 내에서 검색해보니 상단 이벤트 베너도 TabView 였습니다.
그 쪽에서 이벤트 목록을 받아오는 API로 데이터를 받아오기 전까지는 요소가 0개였습니다.
홈에서 앱이 강제종료 되는 이유가 이 것임을 추측하게 되었습니다!
우선 정확하게 상황을 파악하기 위해 16.0 시뮬레이터로 앱을 실행해봤습니다.
정말 홈에서 앱이 크래쉬가 나면서 앱이 종료되었습니다.
iOS 16.0 ~ 16.0.2 에서 TabView 에 0개의 요소를 그려줄 때 발생하는 오류였습니다.
오류 수정
어떻게 해결할 수 있을까요?
검색해보니 아래와 같이 if문으로 분기처리를 하라고 하였습니다. (글 하단 참고에 스택오버플로 링크 첨부하였습니다.)
위에 코드를 사용해 이슈를 해결할 수 있었습니다. 16.0 시뮬레이터에서 앱이 더 이상 죽지 않았습니다!
원인을 찾아 해결했다고 생각하고 기뻐하고 있었는데요.
QA 분께서 iOS 15 대에서 이 텝뷰가 보이지 않는다고 하였습니다!
아마 SwiftUI 에 TabView 가 iOS 15대에서는 분기 처리가 다르게 동작하는 듯 하였습니다.
이벤트 목록 모델을 불러온 뒤에 목록의 갯수대로 베너가 그려지는 것을 기대했고 iOS 16대 에서는 잘 보여졌습니다.
iOS 15 대에서는 처음에 0개였으므로 계속해서 0개로 보여주는 현상입니다.
아래와 같이 iOS 16대와 그 이전 버전 대에서 코드를 다르게 동작하게 분기 처리를 추가하여 이 이슈도 해결할 수 있었습니다.
이상으로 오류를 발견하고 파악하고 해결했던 내용들을 작성해봤습니다.
누군가 이와 같은 오류를 겪으신 분에게 도움이 되길 바랍니다.
저는 이 오류를 알려준 친구에게 소고기를 사려고 합니다~
오류 원인을 알려주신 제 친구 SK 감사합니다.
참고
https://stackoverflow.com/questions/73950003/simple-tabview-is-crashing-in-ios-16
'IT > Swift' 카테고리의 다른 글
Swift 에서 구조체 모델을 UserDefaults (내부 DB)에 저장하는 방법 (0) | 2023.03.20 |
---|---|
SwiftUI 에서 삼각형을 그리는 방법(역삼각형, 말풍선 포함) (0) | 2022.11.03 |
스위프트 이니셜라이저(초기화) (0) | 2021.06.17 |
swift 접근제어자(Access Control) (0) | 2021.06.04 |
Swift 에서 클로저와 고차함수 (0) | 2021.01.13 |
- Total
- Today
- Yesterday
- 스위프트
- 프로그래밍
- Apple
- MySQL
- 시원스쿨
- 단어
- 뇌를 자극하는 C 프로그래밍
- 프로그램
- 테라스캔
- 반복문
- C
- 뇌를 자극하는 C프로그래밍
- IOS
- 배열
- 연습문제
- Matlab
- Swift
- 왕초보 영단어1
- 영어
- 리눅스
- Xcode
- terascan
- database
- 포인터
- exercise
- 매트랩
- 애플
- 함수
- 형용사
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |