본문 바로가기

iOS

(28)
[트러블 슈팅] DiffableDataSource 컬렉션 뷰에 다양한 데이터모델을 사용하기 😐 문제 배경프로젝트 진행중에 CollecionView를 중복으로 사용하면서 발생하였습니다.검색 페이지예매내역 더보기 페이지찜 목록 더보기 페이지 위 3개의 View는 모두 다른 ViewController입니다.그리고 안에 있는 컬렉션 뷰는 각 VC에 생성 및 구성작업을 했습니다.구현하고 보니, 컬렉션뷰의 디자인이 동일한데 각 VC에서 생성하다보니 중복되는 느낌을 받았고, VC에 코드줄이 길어지면서 가독성도 떨어지게 되었습니다.-> 그래서 이를 하나의 컬렉션 뷰로 파일 분리하여 구성한 다음 재사용하면 VC가 더 간결해지겠다고 생각했습니다! 🤔 상황재사용 하기전에 각 컬렉션 뷰의 공통점이 있는지 파악을 먼저 했습니다.1. 3개의 컬렉션 뷰 모두 DiffableDataSource를 사용했습니다.2. 3개..
[트러블 슈팅] CoreData의 Entity Attribute의 타입을 변경한 경우 배경JSON으로 받아온 데이터 항목중 하나를 다른걸로 변경하고자 했습니다.위 사진은 JSON 항목중 일부를 나타낸 사진입니다기존에 CoreData에 time_last_update_utc인 String 타입 문자열을 저장하다가, time_next_update_unix로 항목을 변경해야 했습니다. 그래서 Int타입을 받기 위해 Attribute의 updateTime 타입을 String -> Integer 64로 변경했습니다.CoreData를 불러오는 메서드도 모두 Int형식으로 받도록 수정하였습니다. ⚠️ 문제발생 CoreData에 저장된 updateTime 속성을 Int타입으로 값 갱신하는 과정에서 치명적인 오류가 발생했습니다. Persistent store migration failed, missin..
메모리 사용량 확인을 위한 vmmap vmmap(Virtual Memory Map)vmmap이란 Xcode, macOS에서 사용하는 가상 메모리 매핑 도구입니다.특정 프로세스의 메모리 사용량을 맥 가상 메모리로 매핑하여 메모리 사용량을 보여줍니다.터미널에서 사용하며, 실 기기의 메모리가 아니라 맥 기반 메모리를 매핑하게 됩니다.  vmmap 사용방법Xcode에서 빌드 후 특정 프로세스중에서 확인하기 위해 break point를 걸거나 Debug Memory Graph를 열면 좌측에 프로젝트명 PID 번호가 나타나게 됩니다.터미널에서 해당 PID를 이용하여 vmmap을 실행할 수 있습니다.$ vmmap PID_DATA, _TEXT:  실행코드 및 전역변수malloc: 힙 영역malloc guard page: 힙 오버플로우를 방지용 영역stac..
UICollectionViewLayout과 UICollectionViewFlowLayout CollectionView는 TableView와 다르게 layout을 설정해주지 않으면 생성시 오류가 발생합니다.CollectionView 생성자에서 인자로 받는 UICollectionViewLayout이 있습니다.왠만한 레이아웃은 UICollectionViewLayout으로 할 수 있지 않을까? 싶었는데 CollectionView 생성 인자로 모두 들어갈 수 있다는 점에서 많이 헷갈렸습니다.이번 기회에 정리해보고자 합니다.  UICollectionViewLayouthttps://developer.apple.com/documentation/uikit/uicollectionviewlayout UICollectionViewLayout | Apple Developer DocumentationAn abstrac..
UIBeizerPath UIBeizerPathA path that consists of straight and curved line segments that you can render in your custom views.공식문서에 따르면, 사용자의 커스텀 뷰에서 렌더링할 수 있는 직선 곡선 세그먼트로 구성된 경로라고 합니다.해당 객체는 UIKit의 Drawing에 속해있는 클래스입니다.한마디로 사용자가 원하는 모양을 그려낼 수 있도록 도와주는 객체라고 생각하시면 됩니다. initUIBeizerPath를 생성하는데 기본으로 주어지는 모양들이 존재합니다.// 기본 생성public init()// 직사각형 모양 CGRect를 인자로 받는다. CGRect(x: ,y: , width: , height: ,) x y 는 그리기의 시작지..
NotificationCenter NotificationCenter직역하면 알림센터로, Observer에게 Notification 객체를 전달하는 싱글톤 객체입니다.델리게이트 패턴은 일대일 송수신에 장점이 있지만, 이 객체는 일대다, 다대다 통신의 장점을 갖고 있습니다. Notification /// A tag identifying the notification. public var name: Notification.Name /// An object that the poster wishes to send to observers. /// /// Typically this is the object that posted the notification. public var object: Any? /// St..
iOS Combine CombineCombine은 비동기 및 이벤트 처리 코드를 작성하는데 사용되는 프레임워크 입니다.이전에 반응형 프로그래밍으로 RxSwift를 사용해 본 적이 있는데, 애플에서 개발한 Combine도 있다고 하여 개념을 정리해보고자 합니다  Publisher: 값을 생성하고 전달하는 객체입니다.public protocol Publisher { associatedtype Output associatedtype Failure: Error func receive(subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input} Subscriber: Publisher로부터 데이터를 수신하고 처리하는 객체입니..
URLSession 번역 https://developer.apple.com/documentation/foundation/urlsession URLSession | Apple Developer DocumentationAn object that coordinates a group of related, network data transfer tasks.developer.apple.com  URLSession네트워크 데이터 통신 작업과 관련된 그룹을 조정하는 객체 해당 클래스는 URL로 표시된 엔드포인트에서 데이터를 다운로드하거나 업로드 하기 위한 API를 제공한다.또한 앱이 실행되지 않거나 일시정지된 시점에서도 백그라운드에서 다운로드할 수 있는 기능을 제공URLSessionDelegate와 URLSessionTaskDelegate를 ..