CH 05. 일기 앱 만들기

1 분 소요

Simulator Screen Shot - iPhone 11 Pro - 2022-04-10 at 04 39 39 Simulator Screen Shot - iPhone 11 Pro - 2022-04-10 at 04 39 47 Simulator Screen Shot - iPhone 11 Pro - 2022-04-10 at 04 39 58 Simulator Screen Shot - iPhone 11 Pro - 2022-04-10 at 04 40 08 Simulator Screen Shot - iPhone 11 Pro - 2022-04-10 at 04 40 19 Simulator Screen Shot - iPhone 11 Pro - 2022-04-10 at 04 40 27

기능 상세:
  • 일기장 탭을 누르면 일기 리스트 표시
  • 즐겨찾기 탭을 누르면 즐겨찾기한 일기 리스트 표시
  • 일기를 등록, 수정, 삭제, 즐겨찾기
활용 기술:
  • UITabBarController
    다중 선택 인터페이스를 관리하는 컨테이너 뷰 컨트롤러로, 선택에 따라 어떤 자식 뷰 컨트롤러를 보여줄 것인지가 결정
    • UITabBar
      • 앱에서 서로 다른 하위작업, 뷰, 모드 사이의 선택을 할 수 있도록, 탭바에 하나 혹은 하나 이상의 버튼(TabBarItem)을 보여주는 컨트롤
  • UICollectionView
    데이터 항목의 정렬된 컬렉션을 관리하고 커스텀한 레이아웃을 사용해 표시하는 객체(TableView - 리스트형식)
    • Cell
      컬렉션 뷰의 컨텐츠를 표시
    • Supplementary View
      섹션에 대한 정보를 표시(Header or Footer)
    • Decoration View
      컬렉션 뷰에 대한 배경을 꾸밀 때 사용
    • UICollectionViewLayout
      컬렉션 뷰 내의 아이템 배치 및 시각적 스타일 결정
      • Cell, Supplementary View, 컬렉션 뷰의 바운드, 내부에 있는 Decoration View의 위치를 결정하고 시각적 상태의 정보를 컬렉션 뷰에 제공
    • UICollectionViewFlowLayout
      셀을 원하는 형태로 정렬
      • 셀의 선형경로를 따라 배치, 최대한 행을 따라 많은 셀을 채우다가 현재 행의 셀이 더 이상 들어갈 수 없게 된다면 새로운 행을 만들어 계속 배치
      • 구성단계
        1. Flow 레이아웃 객체를 작성하고 컬렉션 뷰에 이를 할당
        2. 셀의 width, height를 정함. (필수!)
        3. 필요한 경우 셀들 간의 좌우 최소 간격, 위아래 최소 간격을 설정
        (셀들의 크기가 다르면 실제 간격이 지정한 값보다 큰 값으로 다를 수 있음!)
        4. 섹션에 header와 footer 크기 지정
        섹션 자체의 공간을 줄 수 있음 UIEdgeInsetsMake(top, left, bottom, right)
        5. 레이아웃의 스크롤 방향 설정
    • UICollectionViewDataSource
      컬렉션 뷰로 보여지는 컨텐츠들을 관리하는 객체
    public protocol UICollectionViewDataSource : NSObjectProtocol  
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 지정된 섹션에 표시할 셀의 개수를 묻는 메서드
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath) -> UICollectionViewCell 컬렉션뷰의 지정된 위치에 표시할 셀을 요청하는 메서드
    optional func numberOfSections(in collectionView: UICollectionView: UICollectionView) -> Int 섹션의 개수를 묻는 메서드
    • UICollectionViewDelegate
      컨텐츠의 표현, 사용자와의 상호작용과 관련된 것들을 관리하는 객체
  • NotificationCenter
    등록된 이벤트가 발생하면 해당 이벤트에 대한 행동을 취하는 것
    • 앱 내에서 아무데서나 메시지를 던지면 앱 내에서 아무데서나 이 메시지를 받을 수 있게 해주는 것
    • Post메서드를 이용해서 이벤트 전송
    • Observer 메서드를 등록해서 post한 이벤트를 전달받음
에러:

Fatal error: Index out of range

  • 즐겨찾기, 수정, 삭제 Notification에 indexPath를 보내줘서 일기장 화면과 즐겨찾기 화면에 전달되게 되면 일기장 화면과 즐겨찾기 화면에 일기 개수가 다를 경우 에러 발생
  • uuidString 사용
    • 일기를 추가할 때 마다 다이어리 객체에 일기의 고유한 값을 저장
    • 즐겨찾기 수정, 삭제 notification도 index path 대신 일기를 특정할 수 있는 고유한 값을 전달
    • 전달받은 곳에서 배열에 이 고유한 값의 일기가 있는지 확인하고 이 고유한 값의 해당되는 일기의 index로 수정삭제 즐겨찾기 상태 업데이트

카테고리:

업데이트: