본문 바로가기

전체 글

(356)
[트러블 슈팅] DiffableDataSource의 같은 데이터 apply로 인한 오류 문제 배경DiffableDataSource를 사용하여 두개 섹션의 셀을 나타내도록 구성하였습니다.검색결과와 최근 본 책의 섹션은 같은 데이터모델을 사용하고 있습니다.검색결과의 셀을 선택하면 책의 자세한 정보가 담긴 페이지가 보여지고, 자동으로 최근 본책의 섹션에 저장되도록 설정하였습니다.문제 원인DiffableDataSource를 사용해서 고유한 셀이 아닌 중복적으로 나타나 앱이 튕겨버린다.이는 중복된 셀을 안보여주는 점은 있지만.. 문제는 팅기고 알게된다는것.. 매우 치명적이다. 해결한 방법데이터모델 수정가장 직관적인 방법으로 같은 데이터를 가져도 데이터 항목중 하나를 다르게 두는 방법이다.struct Book: Hashable, Decodable { let title: String let..
멀티 스레딩 프로세스(Process): 운영체제로부터 자원을 할당받은 작업의 단위스레드(Thread): 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행된다.프로그램을 실행하면 해당 프로그램은 메모리에 올라가게 되고, 운영체제로부터 시스템 자원을 할당받아 프로그램을 실행시킨다. 스레드 특징스레드는 프로세스 내부에 존재하므로 프로세스의 데이터 영역에 접근이 가능하다.스레드끼리 서로의 데이터에 접근 가능하다.스레드도 하나의 작업단위라 병렬처리가 가능하다.프로세스의 메모리영역은 code, data, stack, heap으로 나뉘지만, 스레드는 stack 메모리 공간만 갖는다.하나의 프로세스 내부에 여러개의 스레드를 가질 수 있다.싱글 스레드: 하..
[트러블 슈팅] 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..
Swift에서 인스턴스를 생성하는 방법들 🤨 UI 컴포넌트 인스턴스를 클로저로 생성하는 이유가 뭘까?이 글은 위 궁금증으로 시작되었습니다.앱을 개발할 때 UI컴포넌트를 사용하기 위해 ViewController에 인스턴스를 생성하는 과정이 필요했습니다.class ViewController: UIViewController { // 인스턴스 생성 후 메서드를 통해 해당 인스턴스의 속성 초기화 let label1 = UILabel() func configureUI() { label1.text = "Hello, World!" label1.textColor = .black label1.textAlignment = .center label1.font = .boldSystemF..
[프로그래머스] 베스트 앨범 문제https://school.programmers.co.kr/learn/courses/30/lessons/42579  내가 푼 풀이[장르: (인덱스: Int, 재생수: Int)]의 딕셔너리 한개와, [장르: 총재생수] 딕셔너리를 구현하여 만들었습니다.주어진 jenres 문자열 배열을 위 딕셔너리 두개로 먼저 파싱한 뒤, 총 재생수가 많은 순으로 정렬하여 해당 장르를 접근하였습니다.[장르: (인덱스: Int, 재생수: Int)]의 value에서 재생수가 많은 순으로 정렬한 다음, 장르 key값으로 (인덱스: Int, 재생수: Int) 튜플 value에 접근하여 가장 재생수가 높은 두개의 곡을 뽑아서 배열에 저장한 뒤 리턴하였습니다. 코드로 구현하면 다음과 같습니다.import Foundationfunc ..
[프로그래머스] 비밀 코드 해독 문제https://school.programmers.co.kr/learn/courses/30/lessons/388352 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 내가 푼 방법비밀코드의 범위가 주어지면 해당 범위에서 만들 수 있는 모든 조합을 먼저 구한 뒤,각 ans의 응답값을 비교해서 모두 일치하는 경우 하나의 비밀코드로 간주했다.조합과 이중반복문으로 시간초과가 걸릴 것 같았지만, 가까스로 통과한 느낌이였다.import Foundationfunc solution(_ n:Int, _ q:[[Int]], _ ans:[Int]) -> Int { let targetArr = Array(1...n) ..
[프로그래머스] 서버 증설 횟수 Swift 문제 설명 ▼더보기당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 m명 늘어날 때마다 서버 1대가 추가로 필요합니다. 어느 시간대의 이용자가 m명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 n x m명 이상 (n + 1) x m명 미만이라면 최소 n대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 증설해야 하는지 알고 싶습니다. 같은 시간대에 서버를 x대 증설했다면 해당 시간대의 증설 횟수는 x회입니다.다음은 m = 3, k = 5 일 때의..