首页 > 解决方案 > X 小时后从 Realm 中删除我的所有数据?

问题描述

我正在使用 Swift (UIKit) 创建一个 iOS 应用程序,我将从 API 获取的所有数据存储到一个领域中,以便它可以离线使用。有人问我,该应用程序必须在上次通过 Internet 连接打开后 24 小时内以离线模式使用。

有没有办法做到这一点?我正在考虑在用户打开具有互联网连接的应用程序时启动一个 24 小时的计时器(每次用户打开连接的应用程序时都会重新启动),并且在 24 小时完成后,运行一个函数来删除所有数据境界。

这有意义吗?有更好的方法吗?

谢谢,

标签: iosswiftiphonerealm

解决方案


如果它对任何人有帮助,我可以通过为领域 (DateData) 创建一个新类来做到这一点,每次用户打开应用程序并连接到 Internet 时我都会更新它。

class DateData: Object {
 @objc dynamic var date: String = ""

 func dateToString(_ date : Date) -> String{
    let calendar = Calendar.current
    let day = calendar.component(.day, from: date)
    let month = calendar.component(.month, from: date)
    let year = calendar.component(.year, from: date)
    let hour = calendar.component(.hour, from: date)
    let minutes = calendar.component(.minute, from: date)
    let datetime = "\(day)/\(month)/\(year) \(hour):\(minutes)"
    
    return datetime
 }

 func stringToDate(_ date : String) -> Date{
    let formatter = DateFormatter()
    formatter.dateFormat = "dd/MM/yyyy HH:mm"
    
    let newDate = formatter.date(from: date)
    return newDate!
 }
}

并使用以下代码将其添加到领域:

let k = K()
if NetworkMonitor.shared.isConnected {
        print("Online mode")
        realmDB.deleteAllData()
        realmDB.addCurrentConnectionDateTime()
        // Code to execute when connected
    }else{
        print("Offline mode")
        let today = Date()
        let date = realmDB.getLastConnecionDate()
        print(today.timeIntervalSince(date))
        if today.timeIntervalSince(date) > (k.connectionHours * 3600) {
            realmDB.deleteAllData()
        }else{
            // Load data from Realm
        }
    }
}

然后,在我的领域数据库中,我插入了 addCurrentConnectionDateTime() 和 getLastConnectionDate()。以及从领域中删除所有数据:

struct RealmDatabase {

let realm = try! Realm()


//MARK: - Add current DateTime connection to Realm

func addCurrentConnectionDateTime(){
    let date = Date()
    let d: DateData = DateData()
    let dateString: String = d.dateToString(date)
    d.date = dateString
    // Update last connection with the new one
    try! realm.write{
        try! realm.delete(Realm().objects(DateData.self))
        realm.add(d)
    }
}

//MARK: - Get last connection DateTime
func getLastConnecionDate() -> Date {
    var newLastDate = Date()
    let lastDate = realm.objects(DateData.self)
    newLastDate = DateData().stringToDate(lastDate[0].date)
    
    return newLastDate
}

//MARK: - Delete all data from the Realm

func deleteAllData(){
    try! realm.write{
        try! realm.delete(Realm().objects(Movie.self))
        try! realm.delete(Realm().objects(Genre.self))
        try! realm.delete(Realm().objects(Review.self))
    }
}}

就是这样,现在您在常量文件 (K Struct) 中插入的值将是数据在被删除之前保留在领域中的小时数。

可能有更好的方法来做到这一点,因为我对 swift 很陌生,但这很有效。我希望它可以帮助任何人!让我知道。

2021年快乐!


推荐阅读