UIKIT

앱의 데이터 갱신하려면 어떻게 할까?

밤새는 탐험가89 2024. 10. 16. 15:37

앱이 백그라운드로 갔을 때는 데이터가 유지되면서, 앱을 다시 열 때 데이터가 갱신되지 않도록 하고 싶으신 것이라면, UIApplication.didBecomeActiveNotification을 사용하되, 앱이 닫혔다가 다시 열릴 때만 데이터 갱신을 원하신다면, 앱 상태를 관리하는 다른 방법을 사용할 수 있습니다.

1. UserDefaults 사용하여 앱 상태 저장

앱이 포그라운드에서 백그라운드로 전환될 때 상태를 UserDefaults에 저장하고, 이후 앱이 다시 열릴 때 이 상태를 확인하여 데이터를 갱신하도록 할 수 있습니다.

 

class YourViewController: UIViewController {

    private let lastClosedKey = "lastClosedKey"
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(appWillResignActive), name: UIApplication.willResignActiveNotification, object: nil)
        
        // 초기 데이터 로드
        loadData()
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    @objc func appWillResignActive() {
        // 앱이 백그라운드로 가기 전에 현재 시간을 저장
        UserDefaults.standard.set(Date(), forKey: lastClosedKey)
    }

    @objc func appDidBecomeActive() {
        // 앱이 포그라운드로 돌아왔을 때
        if let lastClosedDate = UserDefaults.standard.object(forKey: lastClosedKey) as? Date {
            let timeInterval = Date().timeIntervalSince(lastClosedDate)
            // 마지막 닫힌 시간으로부터 일정 시간이 지났는지 확인
            if timeInterval > 60 * 5 { // 예: 5분 이상 경과
                getRandomSpot() // 데이터 갱신
            }
        }
    }
    
    func loadData() {
        // 데이터 초기 로드 또는 화면 설정
        getRandomSpot() // 처음 화면이 로드될 때 데이터 로드
    }
    
    func getRandomSpot() {
        // 데이터 갱신 코드
    }
}

 

 

이 코드의 동작 방식

  1. 앱이 백그라운드로 이동할 때: appWillResignActive 메서드에서 현재 시간을 UserDefaults에 저장합니다.
  2. 앱이 포그라운드로 돌아올 때: appDidBecomeActive 메서드에서 마지막 저장된 시간을 읽어와 현재 시간과 비교합니다.
    • 만약 저장된 시간으로부터 특정 시간이 경과한 경우에만 getRandomSpot()을 호출하여 데이터를 갱신합니다.

이렇게 하면 사용자가 앱을 닫고 다시 열 때, 마지막에 앱을 닫았던 시간을 기준으로 특정 시간이 지나면 데이터가 갱신되도록 제어할 수 있습니다.

 

 

🔥 viewWillAppear() 에 했는데, 이러면 상세페이지로 넘어갔다가 다시 돌아오면 데이터가 갱신되버린다...