[트러블 슈팅] CoreData에 저장한 데이터가 없는데 데이터가 존재하는 문제
·
내일배움캠프/환율 계산기 - 개인 프로젝트
⚠️ 문제: Coredata에 데이터를 저장하지 않았으나 데이터가 있는 것으로 판단됨앱의 첫 실행 시 데이터가 없으므로 API를 호출하여 새로운 데이터를 받아옵니다.(디버깅용 print문 "1번째 환율 정보 API 호출" 출력으로 첫 호출임을 판단 가능) 첫 호출이므로 loadUpdateDate() 결과로 nil이 반환되어야하나 Optional 값을 언래핑에 실패했다는 오류가 발생합니다. ❗️ 원인: ListCell의 Height 충돌브레이크포인트를 찍어 확인해보았습니다.의도대로라면 157번째 줄에서 updateDate.isEmpty == true로 판단되어 nil을 반환했어야하는데,해당 조건문으로 들어가지 않고 159번 줄을 실행하고 있습니다. 즉, CoreData에 저장된 데이터가 있다는 말이 됩니다..
[트러블 슈팅] 셀 선택 시 여러 개의 데이터가 출력되는 현상
·
내일배움캠프/환율 계산기 - 개인 프로젝트
⚠️ 문제: UICollectionView ListCell 선택 시 여러 셀의 데이터가 출력셀의 별 버튼 클릭시 해당 셀의 데이터(환율 코드)가 출력되기를 기대하였습니다.그러나 스크롤 후 다른 셀에서 버튼 클릭 시 선택된 셀 외에도 다른 셀의 정보가 출력되는 현상이 발생하였습니다.위 사진에서는, 모로코(MAD) 셀을 선택하였으나 다른 셀의 데이터인 XOF가 출력되었습니다. ❗️ 원인: 별 버튼의 Action 설정 시점에 따른 중복 캡처 발생별 버튼을 눌렀을 때의 액션을 어떻게 할당해주어야할까 고민하다 뷰 컨트롤러에서 동작을 정의하는 것으로 결정했습니다. 기존에 MVC 패턴을 사용하다 MVVM 패턴으로 리팩토링했기 때문에 View 카테고리 내부에서도 View와 ViewController가 나뉘어 있는 상..
[트러블 슈팅] UICollectionView Cell Autolayout 충돌
·
내일배움캠프/환율 계산기 - 개인 프로젝트
⚠️ 문제: UICollectionView 스크롤 시 콘솔에 warning 출력 UICollectionView로 구현한 List Layout 섹션을 스크롤하니 위와 같은 경고가 콘솔에 출력되었습니다. ❗️ 원인: ListCell의 Height 충돌내용을 읽어보니 리스트 레이아웃의 셀로 사용하고 있는 ListCell의 height가 충돌하고 있는 것으로 보입니다. private func setLayout() { ... contentView.snp.makeConstraints{ $0.directionalEdges.equalToSuperview() $0.height.equalTo(60) } ... ..
[트러블 슈팅] UISearchBar backgroundColor 미적용
·
내일배움캠프/환율 계산기 - 개인 프로젝트
⚠️ 문제: UISearchBar.backgroundColor 미적용 searchBar.backgroundColor = .red 위 코드를 적용했으나 의도한 바와 달리 흐리게 표현되고 있습니다. ❗️ 원인: UISearchBarBackground 이미지 UI 디버깅을 해보니 .red로 설정된 background 위에 하나의 뷰가 더 올라가 있습니다. UISearchBarBackground 라는 이름의 이미지뷰로 추정됩니다. 이때문에 searchBar의 배경 색상 자체는 빨간색으로 잘 변경되었지만 지난번 UISegmentControl 배경 색상을 바꾸면서 겪었던 때와 마찬가지로 이미지뷰가 겹쳐져 의도한 색상으로 보이지 않았던 것 같습니다. 🤔 해결과정: backgroundImage를 없애보기위에서 언급했..
[프로젝트 소개] 환율 계산기 앱 만들기
·
내일배움캠프/환율 계산기 - 개인 프로젝트
내일배움캠프 앱 개발 숙련 주차 개인 과제로 환율 계산기 앱을 구현합니다.1. 프로젝트 개요🎯 프로젝트 명 - Currency Converter: 환율 계산기 앱 → 실시간 데이터를 외부 API를 통해 받아와 UI에 표시하고, 사용자의 입력을 바탕으로 새로운 결과를 계산하여 표시 📍 프로젝트 목적: 아래 5가지 사항에 관한 학습• SnapKit을 활용한 UI 구성 및 AutoLayout 디버깅 경험• URLSession을 활용한 Open API 통신• UITableView를 통한 리스트 UI 구성• MVVM 패턴을 활용한 로직 분리• CoreData를 활용한 간단한 데이터 저장 및 즐겨찾기 기능 🗓️ 프로젝트 기간: 2026.02.13 ~ 02.25. 🛠️ 기술 스택개발 언어: SwiftUI Fr..
[트러블 슈팅] UICollectionView FooterView의 UIPageControl currentPage 변경
·
내일배움캠프/Kiosk - Gacha!
⚠️ 문제: UICollectionView FooterView에 배치한 UIPageControl의 currentPage 변경 불가 FooterView에 배치한 UIPageControl의 currentPage를 변경하고 싶었으나didSelectItemAt으로는 FooterView 내부에 전달해줄 방법을 찾기 힘들었습니다. 방법이 없지는 않겠지만.. 이번에는 시간이 부족한 관계로 꼼수를 한번 사용해봅시다. ✅ 해결: FooterView 내부 속성을 UICollectionView에서 참조class GachaCollectionView { var pageControl: UIPageControl? ...}class ViewController { ... func collectionView(_ collectio..
[트러블 슈팅] UISegmentedControl 배경 색상 설정하기
·
내일배움캠프/Kiosk - Gacha!
⚠️ 문제: 설정한 색상이 제대로 반영되지 않음class CategorySegmentedControl: UISegmentedControl { override init(frame: CGREct) { super.init(frame: frame) ... backgroundColor = UIColor(...) // 배경 색상 설정 - #FCF5EB }} backgroundColor를 설정하였으나 의도와 달리 색상이 어두침침하게 보입니다. ❗️ 원인: UISegmentedControl의 기본 imageView와의 충돌UISegmentedControl은 기본적으로 각 세그먼트에 회색의 반투명한 이미지 뷰가 배치된다고 합니다. 이때문에 실제 backg..
[트러블 슈팅] UISegmentedControl 이니셜라이저 재정의
·
내일배움캠프/Kiosk - Gacha!
⚠️ 문제: 인스턴스 생성 시 오류 발생 그림의 카테고리 선택 부분을 구현하기 위해 커스텀 UISegmentedControl 클래스를 정의했습니다.class CategorySegmentedControl: UISegmentedControl { override init(frame: CGRect) { super.init(frame: frame) setSegments() ... } func setSegments() { ... }} 그러나 MainView에서 CategorySegmentedControl 인스턴스를 생성하여 사용하려니 오류가 발생하였습니다. ❗️ 원인: 이니셜라이저의 매개변수가 없음지금까지는 만들어 본 커스텀 컴포넌트들은 모두 UIView를 상속하..
[프로젝트 소개] Kiosk 앱 만들기 - Gacha!
·
내일배움캠프/Kiosk - Gacha!
내일배움캠프 6주차 팀프로젝트로 Kiosk 앱을 구현했습니다. GitHub - mastarTrack/team1_KioskContribute to mastarTrack/team1_Kiosk development by creating an account on GitHub.github.com 1. 프로젝트 개요🎯 프로젝트 명 - Gacha!: 게임 아이템 상점 키오스크 앱→ '키오스크'란 무언가를 사고 팔기 위한 하나의 도구라는 관점으로 접근하여일반적으로 사용되는 식품 유형이 아닌 게임 아이템이라는 신선한 주제를 선정해보자는 의견에서 주제를 선정 → 팀원 모두 플레이 경험이 있는 게임 '메이플스토리'를 테마로 선정 → 일반 아이템 구매 기능 외 뽑기 시스템을 도입하여 재미 요소를 추가 🗓️ 프로젝트 기간:..
Make your UIKit app more flexible - WWDC25
·
WWDC
UIKit로 만든 앱을 좀더 유연하게, 범용성있게 만드는 법을 알아봅시다.어떤 플랫폼에서 구동하든 해당 사이즈에 맞추어 리사이징되어 항상 친숙하고 직관적인 네비게이션을 제공할 수 있습니다. 1. Scenes유연한(flexible) 앱을 만들 때 가장 핵심적인 개념은 씬(Scene)입니다. 애플이 멀티윈도우를 지원하게 되면서, iOS 13 이후로는 씬 중심의 라이프싸이클을 지원하고 있습니다. 각 씬은 Inactive 상태가 되어 Background로 진입하기 전, UI의 현재 상태를 디스크에 저장합니다. 추후 씬이 다시 Active되어 다시 연결이 필요할 때,예전의 UI 상태를 확인하여 씬이 Inactive가 되기 전의 상태로 복원합니다. 씬은 윈도우에서 앱이 어떻게 배치될지에 대한 정보도 저장합니다. 맥..