작업내역 3주차 화요일 - donggeonoh/bithumb-techcamp-ios-1st GitHub Wiki

작업 내역

  • 동건
    • Core Data 클래스 설계 및 초기화
    • 코인 데이터 차트 화면
      • 날짜 포맷 수정
        • 1분, 10분, 30분, 1시간 날짜 포맷 수정
      • TickType 역할 분리
        • TickType이 너무 많은 역할을 하고 있어 ChartInterval, ChartDateFormat 타입으로 분리
      • Core Data 적용
        • 처음 그래프 화면 데이터를 가져올 때 Core Data에 저장하도록 구현 -> 이후 나중에 Core Data 에서 불러옴
        • ChartCoreDataManager 클래스를 만들어 Core Data의 fetch, update, save 메서드 관리
  • 제로
    • Core Data 클래스 설계 및 초기화
    • 코인 목록 화면
      • 코어 데이터 적용
  • 허황
    • 화면 전환시 데이터 전달
    • 페이지 컨트롤러 리팩터링

고민 및 해결

  • 동건
    • Core Data에서 데이터와 적용하면 차트 그래프가 엉망으로 표시되는 문제

      데이터를 가져오게 되면 단순히 데이터가 배열과 같이 정렬되어 저장이 될 줄 알았지만, 순서와 상관없이 데이터가 저장되었다는 것을 알고 시간 순으로 정렬하여 화면에 표시하도록 하였습니다.

    • Core Data Candlestick의 최신 데이터를 갱신해주기 위한 문제

      Core Data에서 Candlestick의 최신 데이터를 갱신하려고 하는 경우 index로 접근할 수 없어 NSPredicate를 통해 해당 object에 접근하여 최신 데이터로 수정하였습니다.

  • 허황
    • 화면 전환시 데이터 전달 방법

      코인 리스트 뷰 -> 상세화면 화면 전환시 코인 심볼 전달 방법을 고민했는데 여러가지 데이터 전달 방법 중 프로퍼티에 값을 직접 할당해주는 방법을 선택했다. 그 이유로는 클로져를 넘기거나 델리게이트로 데이터를 전달하는 방법은 상세화면이 코인 리스트 뷰한테 데이터를 전달할 때 용이하기 때문이다. 또, 노티피케이션 센터를 사용해서 노티피케이션을 전달할 수 있지만 코인 상세화면이 해당 노티피케이션을 addObserve하고 난 후 노티를 전달해 줘야하기 때문에 노티피케이션 센터도 활용할 수 없었다.

      페이지 뷰 컨트롤러 -> 자식 뷰 컨트롤러들에게 코인의 심볼을 넘겨줘야하는데 방법 1. 페이지 뷰 컨트롤러의 setViewController의 컴플리션으로 데이터를 전달 할 수 있지만 setViewController이 호출될 때마다 데이터가 전달되기 때문에 사용할 수 없었다.

      방법 2. 자식 뷰 컨트롤러 프로토콜 메서드 사용 페이지 뷰 컨트롤러가 인스턴스화 될때 자식 뷰 컨트롤러를 해당 프로토콜로 형변환 후 프로토콜 메서드에 코인 심볼을 전달인자로 보내는 방법을 사용했다. 메서드 호출은 잘 됐지만, 뷰가 생성되지 않는 시점에서 데이터를 뷰에 반영하려다 보니 뷰를 찾지 못한다는 런타임 오류가 발생했다.

      방법 3. 자식 뷰 컨트롤러 프로토콜(컴플리션 클로져, 메서드) 사용 방법 2를 응용한 방법으로 프토토콜의 클로져에 데이터를 전달하는 기능을 담아주고, 자식 뷰의 viewDidLoad() 내부에서 해당 클로저를 실행시키는 방법을 사용했다. 방법 3을 사용하게 되면 뷰의 초기화는 완료가 된 시점에 데이터를 전달 받을 수 있기 때문에 런타임 오류가 발생하지 않고 데이터를 안전하게 전달 할 수 있다.