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() {
// 데이터 갱신 코드
}
}
이 코드의 동작 방식
- 앱이 백그라운드로 이동할 때: appWillResignActive 메서드에서 현재 시간을 UserDefaults에 저장합니다.
- 앱이 포그라운드로 돌아올 때: appDidBecomeActive 메서드에서 마지막 저장된 시간을 읽어와 현재 시간과 비교합니다.
- 만약 저장된 시간으로부터 특정 시간이 경과한 경우에만 getRandomSpot()을 호출하여 데이터를 갱신합니다.
이렇게 하면 사용자가 앱을 닫고 다시 열 때, 마지막에 앱을 닫았던 시간을 기준으로 특정 시간이 지나면 데이터가 갱신되도록 제어할 수 있습니다.
🔥 viewWillAppear() 에 했는데, 이러면 상세페이지로 넘어갔다가 다시 돌아오면 데이터가 갱신되버린다...