🛠️ 문제 상황

RetrospectListViewController를 통해 뷰가 생성되고 fetch 요청을 보내게 됩니다.

이때 iCloud 연동 기능이 켜져있는 경우에 CoreData를 store 하는 과정중에 fetch 요청을 보내게 되어 local CoreData 의 값만 fetch 해오게 됩니다.

이 경우 CloudKit 영구 저장소와 로컬 CoreData 저장소가 일치하면 문제가 없으나 iCloud 데이터와 달라지는 경우 문제가 발생합니다.

image.png

image.png

문제 상황

  1. 앱을 실행한다.
  2. Scene Delegate에서 CoreData Container를 생성한다.
  3. CloudKit 영구 저장소와 로컬 CoreData 사이의 동기화가 일어난다.
  4. 동기화가 끝나기 전, Fetch 요청을 보낸다.
  5. 로컬에 있는 CoreData 저장소의 값을 Fetch해온다.
  6. 동기화가 완료되었지만, 이미 패치가 진행되어 누락된 데이터가 발생한다.

💡 해결 과정

1. Notification 보내기

요약: iCloud와 동기화가 되면 NotificationCenter를 통해 동기화가 완료됨을 알림

  1. local과 iCloud 데이터 동기화
  2. iCloud 동기화 Notification을 보냄
  3. 회고 리스트 뷰 컨트롤러가 이를 관찰하다가 Notification을 감지
  4. 다시 coreDataManager.fetch를 진행