我有一个表视图,我想在每天的特定时间(用户在选取器中输入)清空它。这是它大部分工作的代码,但是假设用户在晚上7点打开应用程序,更新时间是晚上8点,数据没有被删除(这是正确的),但是当时间是在同一天晚上9点,应用程序被打开时,数据没有被删除(这是不正确的)。我认为这与lastRefreshDate
每次打开应用程序时都会更新有关,并且必须从lastRefreshDate
而不是从userPickedHour
等待24小时。应用程序应该像这样工作,有一个设定的时间下午7点因此,当用户打开应用程序时,应用程序应该在第二天晚上7点或晚上7点之后删除数据,但如果用户在第二天晚上7点之前打开应用程序,就不应该删除数据。
代码如下:
class RefreshManager: NSObject {
static let shared = RefreshManager()
private let defaults = UserDefaults.standard
private let defaultsKey = "lastRefresh"
private let calender = Calendar.current
func loadDataIfNeeded(completion: (Bool) -> Void) {
if isRefreshRequired() {
// load the data
defaults.set(Date(), forKey: defaultsKey)
print("xxxxxx")
completion(true)
} else {
print("yyyyyy")
completion(false)
}
}
private func isRefreshRequired(userPickedHour: Int = 16) -> Bool {
let SleepPickerdate = UserDefaults.standard.object(forKey: "SleepDate") as? Date
let userPickedHour = Calendar.current.component(.hour, from: (SleepPickerdate)!)
print(userPickedHour)
guard let lastRefreshDate = defaults.object(forKey: defaultsKey) as? Date else {
return true
}
if let diff = calender.dateComponents([.hour], from: lastRefreshDate, to: Date()).hour,
let currentHour = calender.dateComponents([.hour], from: Date()).hour,
diff >= 24, userPickedHour >= currentHour {
print("Delete TableView")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Delete"), object: nil)
print(diff)
return true
} else {
print("Don't Delete TableView")
return false
}
}
}
class ViewController: UIViewController {
let refreshManager = RefreshManager.shared
override func viewDidLoad() {
super.viewDidLoad()
refreshManager.loadDataIfNeeded() { success in
print(success)
}
}
}
发布于 2020-05-17 12:05:46
简单样本
例如,我们可以在"lastRefresh“中设置下一次更新日期,因此,当该日期过去时,它将再次刷新它为下一次刷新设置日期。
class RefreshManager: NSObject {
static let shared = RefreshManager()
private let defaults = UserDefaults.standard
private let defaultsKey = "lastRefresh"
private let calender = Calendar.current
func loadDataIfNeeded(completion: (Bool) -> Void) {
if isRefreshRequired() {
var date = Date()
//Check for duration (Daily, Weekly or Monthly) (0,1,2)
switch SaveManager.shared.user()!.UserShare.duration {
case 0:
//If user want to share daily
date = date.addComponentsToDate(seconds: 0, minutes: 0, hours: 0, days: 1, weeks: 0, months: 0, years: 0)
break
case 1:
//If user want to share weekly
date = date.addComponentsToDate(seconds: 0, minutes: 0, hours: 0, days: 0, weeks: 1, months: 0, years: 0)
break
case 2:
//If user want to share monthly
date = date.addComponentsToDate(seconds: 0, minutes: 0, hours: 0, days: 0, weeks: 0, months: 1, years: 0)
break
default:
//If user want to share daily : Default
date = date.addComponentsToDate(seconds: 0, minutes: 0, hours: 0, days: 1, weeks: 0, months: 0, years: 0)
break
}
date = date.startOfDay
defaults.set(date, forKey: defaultsKey)
print(date.toString())
completion(true)
} else {
completion(false)
}
}
private func isRefreshRequired() -> Bool {
guard let lastRefreshDate = defaults.object(forKey: defaultsKey) as? Date else {
return true
}
if lastRefreshDate.isLaterThanOrEqualTo(date: Date()) {
return true
} else {
return false
}
}}
https://stackoverflow.com/questions/50779564
复制相似问题