iOS프로그래밍실무 (3학년 1학기)

250515 iOS프로그래밍실무 11주차

Z2AE 2025. 5. 15. 15:59

struct MovieData : Codable

  • 서버/API에서 받아오는 데이터는 일반적으로 JSON 포맷
  • Codable protocol을 채택하면 다음을 자동으로 대신 해줌
    • JSONDecoder 클래스가 JSON → 구조체/클래스(디코딩)
    • JSONEncoder 클래스가 구조체/클래스 → JSON(인코딩)
  • 클래스가 매칭되는 변수 이름만 맞추면 복잡한 파싱 코드를 직접 만들 필요 없음
  • 서버통신을 하거나, 파일 저장/읽기 기능을 구현할 때는 항상 Codable을 채택해서 정의함

JSONDecoder : JSON데이터를 원하는 데이터 타입으로 변환

  • func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable

해당 코드가 에러나는 이유 : 에러처리를 하지 않아서

해당 코드가 에러나는 이유 : 수동으로 직접 self를 써야 하는데 쓰지 않아서

Main Thread Checker관련 오류 발생

  • Main Thread Checker는 Xcode가 제공하는 실시간 런타임 감시 툴
  • UI 관련 코드가 메인 스레드가 아닌 다른 스레드에서 실행되는것을 탐지
  • 앱 실행 중 콘솔에 "Main Thread Checker: UI API called on a background thread" 라고 경고가 뜸

 

AI에게 프로젝트에 필요한 기능인 어제의 날짜를 반환하는 소스를 만들어달라고 했을 때 답변

Stack View의 constraint

  • Stack View의 핵심 프로퍼티는 4가지
  • Axis - 가로(Horizontal) 스택 뷰인지, 세로(Vertical) 스택 뷰인지?
  • Alignment - 하위 뷰의 위치 정렬
  • Distribution - 하위 뷰의 크기 배분
  • Spacing - 하위 뷰 사이 간격

 

func getData() {
        guard let url = URL(string: movieURL) else{ return }
        let session = URLSession(configuration: .default)
        let task = session.dataTask(with: url) { data, response, error in
            if error != nil {
                print(error!)
                return
            }
            guard let JSONdata = data else { return }
            let dataString = String(data: JSONdata, encoding: .utf8)
            //print(dataString!)
            let decoder = JSONDecoder()
            do {
                let decodedData = try decoder.decode(MovieData.self, from: JSONdata)
                //print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].movieNm)
                //print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].audiAcc)
                self.movieData = decodedData
                DispatchQueue.main.async {
                    self.table.reloadData()
                }
            } catch {
                print(error)
            }
        }
        task.resume()
    }

 

다음 코드들을 적용한 화면 (header와 footer)

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "🍿박스오피스(영화진흥위원회 제공 : "+makeYesterdayString()+")🍿"
    }
    func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
        return "Made by. Lee"
    }

 

MoviePSJ.zip
0.06MB

참고자료 : 한성현 교수님 수업자료