ios - X 小时后从 Realm 中删除我的所有数据?
问题描述
我正在使用 Swift (UIKit) 创建一个 iOS 应用程序,我将从 API 获取的所有数据存储到一个领域中,以便它可以离线使用。有人问我,该应用程序必须在上次通过 Internet 连接打开后 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))
}
}}
就是这样,现在您在常量文件 (K Struct) 中插入的值将是数据在被删除之前保留在领域中的小时数。
可能有更好的方法来做到这一点,因为我对 swift 很陌生,但这很有效。我希望它可以帮助任何人!让我知道。
2021年快乐!
推荐阅读
- python - 在Python中的字符串中提取以特定字符串开头的字符串
- css - Angular中小型设备上的布局损坏
- python - 熊猫 groupby 和 pivot
- wordpress - Woocommerce 在用户未登录时隐藏所有价格(包括销售价格)并替换为文本“您必须登录”
- flutter - 如何创建 Google Pay 链接以汇款或收款?
- jpa - JPA 期望连接表上的 ID 列
- javascript - Lit-html 动态导入不呈现
- html - 垂直居中页面内容并创建填充或边距
- docker - 如何指定确切的 docker 容器版本
- java - 为什么在 main 方法中声明实例变量?