我正在使用Swift (UIKit)创建一个iOS应用程序,我将所有从应用程序接口获取的数据存储到一个领域中,以便它可以脱机使用。我被要求该应用程序必须在离线模式下可用长达24小时,从最后一次打开它与互联网连接。
有没有办法做到这一点?我在想,当用户打开连接到互联网的应用程序时,启动24小时的计时器(每次用户打开连接的应用程序时都会重新启动),在24小时完成后,运行一个函数来删除领域中的所有数据。
这有意义吗?有没有更好的方法呢?
谢谢,
发布于 2021-05-06 16:31:18
如果它对任何人有帮助的话,我可以通过创建一个新的领域类(DateData)来做到这一点,每当用户打开应用程序并连接到互联网时,我都会更新它。
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()。以及删除realm中的所有数据:
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快乐!
https://stackoverflow.com/questions/67407641
复制相似问题