사용자가 공부를 시작한 시간을 yyyy-MM-dd hh:mm:ss
형식으로 서버에 전달하고 있기 때문에 소셜 화면에서 팔로우한 친구들이 공부중인 경우 공부 시작 시간이 그대로 yyyy-MM-dd hh:mm:ss
형식으로 오게 된다.
여기서 시차를 고려하지 않은 문제가 발생하게 되는데 만약 A사용자가 B사용자보다 시차가 9시간 앞서있는 다면 A사용자는 B사용자가 공부중인 시간을 항상 +9시간이 더해져서 보여지게 된다.
공부를 시작할 때 서버로 보내는 시간을 기존의 yyyy-MM-dd hh:mm:ss
형식에서 사용자의 TimeZone을 통해 GMT를 기준으로 +- 몇시간인지 형식에 포함(yyyy-MM-dd hh:mm:ssZZZZZ
)하여 GMT를 기준으로 각 사용자들간의 시간 차이를 구해서 공부중인 시간이 정상적으로 보이도록 해결.
사용자의 TimeZone이 변경되었을 경우 기존에는 이전 데이터가 그대로 보여주고 있었다. 여기서 문제가 발생했는데 만약 사용자가 마지막으로 앱을 사용했던 날짜와 TimeZone이 바뀌고 난 뒤 앱을 사용했던 날짜가 다르게 된다면 동기화문제가 발생하게 된다.
마지막으로 12일의 데이터를 보고 있던 사용자는 TimeZone이 바뀌고 13일이 되었음에도 불구하고 12일 데이터를 보는 상황이 생기게 된다. 그래서 사용자의 디바이스 TimeZone이 바뀌었을 경우를 감지하여 바뀔 때마다 화면을 새로고침해줘서 데이터 동기화를 해결했다.
다행히 NSSystemTimeZoneDidChange
SystemNotification이 존재하여 비교적 간단하게 TimeZone이 바뀐지 여부를 확인할 수 있었다.
TabBarController에서 TimeZoneDidChange Notification을 등록해줘 이벤트를 감지를 하게 되면 TabBarFlowCoordinator에서 TabBarController의 delegate을 채택하여 감지가될 때마다 tabBarController을 다시 화면에 띄워주도록 구현했다. 그래서 사용자가 어느 ViewController에 있어도 TimeZoneDidChangeNotfication 이벤트가 발생하면 tabBarController에서 감지하기 때문에 초기 화면으로 돌아갈 수 있게했다.