X小时后从Realm删除我的所有数据



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

有办法做到这一点吗?我想在用户打开连接了互联网的应用程序时启动一个24小时的计时器(每次用户打开连接的应用程序都会重新启动(,24小时后,运行一个函数从领域中删除所有数据。

这有道理吗?有更好的方法吗?

谢谢,

如果它对任何人都有帮助,我可以通过在领域中创建一个新的类(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))
}
}}

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

也许有办法更好地做到这一点,因为我对swift还很陌生,但这很有效。我希望它能帮助任何人!让我知道。

2021快乐!

最新更新