iOS Swift功能在某些手机上已失效
我们的应用程序要求用户执行日常任务。如果他/她完成了任务,那么在午夜会发布一个新任务。如果他们没有看到,那么到了午夜,他们将继续看到上一个任务,直到看到为止 我正在以用户默认值保存当前日期,并使用isDateInToday检查日期是否已更改:iOS Swift功能在某些手机上已失效,ios,swift,calendar,Ios,Swift,Calendar,我们的应用程序要求用户执行日常任务。如果他/她完成了任务,那么在午夜会发布一个新任务。如果他们没有看到,那么到了午夜,他们将继续看到上一个任务,直到看到为止 我正在以用户默认值保存当前日期,并使用isDateInToday检查日期是否已更改: func checkIfDayChanged() -> Bool { if let date = UserDefaults.standard.object(forKey: "currentDate") as? Date {
func checkIfDayChanged() -> Bool {
if let date = UserDefaults.standard.object(forKey: "currentDate") as? Date {
var calendar = Calendar.current
calendar.timeZone = TimeZone.current
let isSameDay = calendar.isDateInToday(date)
if (isSameDay) {
return false
}
}
return true
}
在大多数情况下,这很好。然而,有一小部分用户即使在前一天完成了同样的任务,仍然被困在同一个任务中。出于某种原因,应用程序没有意识到这一天是新的一天
这可能是电话上的设置吗?还是我需要更改此代码?为什么只有少数几台设备不能工作
更新:
这是完成日常任务(课程)时发生的情况:
func onComplete() {
let latestLesson = UserDefaults.standard.integer(forKey: "currentLesson")
if String(latestLesson) == lesson?.lessonNumber {
if (UserDefaults.standard.bool(forKey: "dayLessonCompleted") == false) {
UserDefaults.standard.set(true, forKey: "dayLessonCompleted")
lesson?.completed = true
}
}
}
每天都会运行以下功能:
private func checkForMoreLessons() {
// Check the date
let newDay = checkIfDayChanged()
// If the day changed, check if user has watched the previous lesson
if newDay {
if (UserDefaults.standard.bool(forKey: "dayLessonCompleted") == true) {
// Save the new day
UserDefaults.standard.set(Date(), forKey:"currentDate")
// Add 1 to the current date
let currentLesson = UserDefaults.standard.integer(forKey: "currentLesson")
UserDefaults.standard.set(currentLesson + 1, forKey: "currentLesson")
UserDefaults.standard.set(false, forKey: "dayLessonCompleted")
}
}
}
需要更多调试详细信息:保存的日期、当前日期、时区等。请注意,日历不会跟踪用户设置中的更改,因此如果时区或区域设置发生更改,则可能会出现问题。也许最好始终使用UTC这样的固定时区。在哪里为日期对象设置新值?只是添加了更多details@cesarcarlos在将值设置为UsersDefaults之前,您似乎正在检查日期是否已更改。需要更多调试详细信息:保存的日期、当前日期、时区、,…请注意,日历不会跟踪用户设置中的更改,因此如果时区或区域设置发生更改,则您可能会遇到问题。也许最好始终使用UTC这样的固定时区。在哪里为日期对象设置新值?只是添加了更多details@cesarcarlos在将值设置为UsersDefault之前,您似乎正在检查日期是否已更改