[TIL] 200313, fri

delma·2020년 3월 14일
1

TIL

목록 보기
32/38
post-thumbnail

오늘 한 일

  • step4 PR 보내고 피드백 받고 수정
  • iOS-squad 스터디
  • 체르노빌 시리즈 봤음 🗼

새롭게 알게 된 것

  • 디코딩 실패시 decodeInteger, decodeDouble 같은 건 0이나 0.0 등의 기본값을 넣어주지만 decodeObject 는 기본값을 넣어주지 않으므로 흐름에 따라서 nil을 리턴할건지 지정된 기본값을 넣어줄건지 정해서 그대로 하면 됨.
  • 열거형은 인코딩이 안됨. 그래서 rawValue를 가지게 해서 rawValue 기반으로 인/디코딩 해줌
 enum Packages: String {
        case glass = "glass"
        case can = "can"
        case plastic = "plastic"
    }
    
    required init?(coder: NSCoder) {
        let decodedString = coder.decodeObject(forKey: packageString) as? String
        let package = Packages(rawValue: decodedString ?? "" )
        self.package = package ?? Packages.glass
        super.init(coder: coder)
    }
    
    override func encode(with coder: NSCoder) {
        super.encode(with: coder)
        coder.encode(self.package.rawValue, forKey: packageString)
    }

고민한 것

아카이빙해서 데이터를 저장하고 불러올 때 어느시점이 좋을지 고민

데이터를 불러오는 시점은 앱이 시작할 때로

처음에는 화면이 active됐을 때도 데이터를 로드해오면 좋을 것 같아 DidBecomeActive에서 로드를 해줬으나, 화면이 active됐을 때 앱델리게이트의 DidBecomeActive는 호출되지 않았고 씬델리게이트의 DidBecomeActive가 호출됐음.. 화면이 Active 됐는데 앱델리게이트의 이것이 호출되지 않을거면 왜 메서드가 존재하는지 잘 모르겠다.

암튼 런칭 시점에 이미 데이터를 로드해왔으므로 Active되는 시점에 데이터를 불러오지 않아도 될 것 같아서 런칭시점에만 로드되도록 변경함

데이터를 저장하는 시점은 앱이 (예상치 못하게)종료될 때와 백그라운드로 들어갈때

앱 종료시점
앱 스위처에서 앱을 종료했을 때는 willTerminate 가 잘 호출되었음.
허나 앱이 메모리가 부족해지면 suspend 상태인 앱을 별도의 알림 없이 종료시키는데 이때는 willTerminate가 호출되지 않으므로 foreground에서 background로 넘어갈때도 데이터를 저장해주면 좋을 것 같다.

foreground에서 background로 가는 시점
앱델리게이트의 ResignActive는 불려지지 않았고 씬델리게이트의 ResignActive가 불려졌고 앱델리게이트의 didEnterBackground가 불려졌다.
앱델리게이트의 ResignActive가 아닌 didEnterBackground에서 데이터를 저장해주면 될 것 같음

내일 할 일

  • 자판기 나머지 스텝 진행

느낀 점

  • 이번주 안에 자판기 미션을 끝내야해서 꽤나 촉박하다. 오늘 머지 됐으니 주말동안 나머지 스텝 빡세게 하면..될까..? ㅋㅋ ㅋ
profile
🌐Code makes world better

3개의 댓글

comment-user-thumbnail
2020년 3월 14일

와 iOS-squad는 뭐죠 ㅋㅋㅋ 멋있다...
주말도 화이팅입니다!!

1개의 답글