iOS Swift功能在某些手机上已失效

iOS Swift功能在某些手机上已失效,ios,swift,calendar,Ios,Swift,Calendar,我们的应用程序要求用户执行日常任务。如果他/她完成了任务,那么在午夜会发布一个新任务。如果他们没有看到,那么到了午夜,他们将继续看到上一个任务,直到看到为止 我正在以用户默认值保存当前日期,并使用isDateInToday检查日期是否已更改: func checkIfDayChanged() -> Bool { if let date = UserDefaults.standard.object(forKey: "currentDate") as? Date {

我们的应用程序要求用户执行日常任务。如果他/她完成了任务,那么在午夜会发布一个新任务。如果他们没有看到,那么到了午夜,他们将继续看到上一个任务,直到看到为止

我正在以用户默认值保存当前日期,并使用isDateInToday检查日期是否已更改:

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之前,您似乎正在检查日期是否已更改