[IOS] Realm을 사용한 일기 앱

East Silver·2022년 1월 7일
0

GOAL

  • MVC 패턴 고려
  • CRUD 가능한 일기앱, 즐겨찾는 일기 목록 따로 보여주는 앱
  • collectionview에서 작성한 일기들 제목/날짜 보여주기
  • Realm 적용
  • 코드로 UI 작성
  • 일기 작성한 날 날씨 저장 (API 이용)

Day 1

Realm

로컬에 데이터를 저장 할 수 있는 라이브러리

선택한 이유와 장점

  • core data보다 빠르다
  • 안드로이드와 공유 할 수 있다.
  • 데이터의 흐름을 눈으로 확인 할 수 있다.

설치

  • 맥북 M1에서 설치할때 주의할 점
    • 터미널을 다른 이름으로 복제 후 오른쪽 마우스 > 정보 가져오기 > 'Rosetta를 사용하여 열기' 체크 후 설치 진행
  • 터미널에서 다음과 같이 진행
    • sudo gem install -n /usr/local/bin cocoapods
    • sudo gem install ffi
    • pod init (프로젝트 디렉토리 내부에서)
    • 프로젝트 디렉토리 내부에 생성된 podfile에 pod 'RealmSwift' 작성 후 저장 (pod 소문자 필수....필수..메모...!!!대문자이면 pod install에서 error가 난다고!!!!!!!!)
    • pod install (프로젝트 디렉토리 내부에서)
    • 이젠 새로 생성된 프로젝트이름.xcworkspace로 프로젝트 열기!

Day 2

와이어 프레임


이런 구성을 오로지 코드로,,과연 할 수 있을까,,!!도전!

  • TabBar Controller
    • Navigation Controller
      • Home View Controller
    • Navigation Controller
      • Saved View Controller

TabBar Controller에서 navigation controller를 통해서 view controller를 연결해주면, 탭 간의 화면이동시 탭 바가 사라지지 않는다.
navigation controller가 없었땐, 탭을 누르면 탭바는 사라진다.

코드로 UI 만들기 #1

스토리 보드와 함께 생성된 프로젝트에서 코드로만 개발하기 위해서 필요한 환경 세팅

  1. 프로젝트 파일 선택 -> Targets 선택 -> Main Interface 부분에 적힌 스토리보드 명 삭제
  2. Info.plist로 이동 -> Application Scene Manifest 를 끝까지 열어서 Storyboard Name 삭제
  3. SceneDelegate.swift 파일로 이동 -> SceneDelegate 클래스의 scene(_:, willConnectTo:, options:) 메서드에 아래와 같은 코드 작성
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
  guard let windowScene = (scene as? UIWindowScene) else { return }
  window = UIWindow(windowScene: windowScene)
  //처음으로 연결될 ViewController를 window?.rootViewController에 연결!
  window?.rootViewController = FirstViewController() 
  window?.makeKeyAndVisible()
}

TabBar Controller

let homeVC = HomeViewController()
let savedVC = SavedViewController()

let homeNav = UINavigationController(rootViewController: homeVC)
let savedNav = UINavigationController(rootViewController: savedVC)
        
setViewControllers([homeNav, savedNav], animated: true)	

AutoLayout

label.translatesAutoresizingMaskIntoConstraints = false

를 해준 이후에 코드로 autolayout이 가능하다.

Day 3

코드로 UI 만들기 #2

CollectionView, ViewController, UILabel, UITextfield

일단 Git에 업로드

Day 4

Realm으로 데이터 관리

일단 Git에 업로드

view의 Life-cycle

navigation controller에 push로 쌓이는 뷰들에서 pop으로 이전 화면으로 돌아왔을때는 viewWillAppear()에서 새로 저장된 데이터를 바탕으로 collectionview를 reload() 할 수 있다.
viewDidLoad에서는 reload를 할 수 없다!

날씨 불러오는 것은 GCD 공부 이후에 계속....

profile
IOS programmer가 되고 싶다

0개의 댓글