[iOS] <MemoApp> 목록 업데이트

RudinP·2023년 11월 9일
0

Study

목록 보기
113/227

목록 업데이트 (테이블 뷰 업데이트)

ViewControllerviewDidLoad 에는 보통 한 번만 실행하는 초기화 코드를 작성한다.

viewWillAppear

  • 뷰가 화면에 표시되기 전 자동으로 실행되는 함수

  • 여기서 테이블뷰에게 목록을 업데이트하라고 알려주면 됨
  • 데이터소스가 전달해주는 최신 데이터로 업데이트 함

다만, 위의 방법은 iOS12까지 사용하던 presentation: fullScreen 옵션 하에만 적용된다. (iOS13부터 기본인 sheet에는 적용 X)

  • 참고로 presentation 변경 방법은 segueway를 선택 후 인스펙터에서 설정하기

  • iOS12 플랫폼에서 same as destination을 presentation 옵션에서 설정해 준 뒤 실행하면 Appdelegate에서 window 속성을 추가해달라는 메시지와 함께, 검정 화면만 뜨고 실행되지 않는다.

  • 해결방법: AppDelegate에 window 속성 추가

iOS 13 이상 해결 방법

  • notification을 활용
  1. save 버튼을 누를 시 notification 전달
  2. notification이 전달되는 시점에 tableview 업데이트 구현

notification

  • 추후 다른 포스트로 정리할 예정
  • 간단히 생각하면 라디오와 같다고 생각하면 된다.
    • 라디오는 주파수를 통해 구분하지만, notification은 이름으로 구분
  • 앱을 구성하는 모든 객체로 전달(BroadCast)
  • ComposeViewController에 extension 으로 notification 추가

  • 이제 save 함수로 가서 화면을 닫기 전에 Notification을 전달

  • 옵저버를 추가한다. 이는 한 번만 실행되기 때문에 보통 viewDidLoad에서 행한다. 여기서는 MemoListTableViewController에서 실행

    - 첫번째 파라미터: 옵저버를 추가할 Notification의 이름
    - 두번째 파라미터: 특별한 이유가 없으면 보통은 nil
    - 세번째 파라미터: 해당 메소드를 어디서 실행할지.
    - UI 업데이트 코드는 메인 스레드에서 실행하는 것이 기본
    - iOS에서는 dispatchQueue, OperationQueue에서 처리
    - 네번째 파라미터: 클로저. 4번째 파라미터로 전달한 클로저가 3번째 파라미터로 전달한 스레드에서 실행. 여기에서는 테이블 뷰 리로드.

Notification에서 제일 중요한 Observer 해제

  • 해제하지 않으면 내부에서 메모리가 낭비됨
  • addObserver 메소드에서는 옵저버를 해제할 때 필요한 객체를 리턴해줌.
    • 이를 토큰이라고 부름
  • 토큰 저장 객체 추가
  • 옵저버는 뷰가 사라지기 전 해제하거나, 소멸자에서 해제함.
    • 여기서는 소멸자에서 해제

결과

제대로 테이블 뷰가 리로드 되는 것을 확인

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글