view가 나타나기전에 데이터를 읽어와서 뷰에 반영하는 방법(네트워크 아님)

어플내에서 helathkit 에서 데이터를 받아온 뒤에, 이를 차트에 표시하려고 하는 중에 문제가 생겼습니다.
viewDidLoad함수 내에서 먼저 retrieve함수를 수행하면, 수면데이터를 받아옴과 동시에, 이를 resultToSleepAmount배열에 따로 저장하도록 만들었습니다. 그런데 setChart를 통해 받아온 데이터를 차트화 시키려고했는데, 계속 데이터가 empty하다고 나와서 자꾸만 에러가 뜹니다. 헬스킷 데이터를 받아오기 전에 뷰를 로딩하기때문에 이러한 문제가 발생하는것이라 생각해서 동기식으로 하려고 했으나 결국 해결하지 못해 이곳에 여쭤봅니다.
아래는 차례로 viewDidLoad, Retireve, SetChart 함수입니다.


107번line이 resultToSleepAmount 배열에 헬스킷으로부터 읽어온 데이터를 저장하는 부분입니다.

데이터를 주고 받는데 문제가 없고 타이밍의 문제라면,

  1. setChart메소드를 view lifecycle에서 좀 더 늦게 그려보시거나 (viewwillAppear, viewdidAppear 등…)
  2. retrieve 메소드(데이터를 받아오는)를 app delegate의 willappLaunch에서 실행시키신 다음에 성공여부를 completion으로 전달하시고 성공 여부에 따라서 ui가 업데이트되도록 notification하시면 되지 않을까요?
좋아요 1

네 감사합니다!! 말씀해주신대로 한 번 해보겠습니다

좋아요 2

대부분 다수의 데이터를 다루는 컴포넌트는 reload 기능이 있을거에요. 대표적으로 DataSource를 사용하는 테이블 뷰나 콜렉션 뷰.
처음에는 빈 데이터(배열)로 컴포넌트가 보여지고, 이후 데이터가 채워지면 그 때 컴포넌트를 reload 하면 됩니다.

좋아요 1