我希望每天都更新viewDidLoad()
内的代码 - 即使应用未运行 - 已关闭或在后台运行。
let Date = NSDate()
let Calendar = NSCalendar.currentCalendar()
var Days = 20
var Hours = 5
var Difference = 0
override func viewDidLoad() {
let FireDate = userCalendar.components(NSCalendarUnit.Hour, fromDate: Date)
if (FireDate.hour == 7) {
days--
Difference = (Days / Hours)
}
}
此代码不符合我的要求。
答案 0 :(得分:1)
如果该代码在7运行,则检查将成功。也就是说,考虑到用户的时区设置,它正在运行的设备上运行7个。
此代码不会每天自动运行。您没有显示代码的位置,但没有任何内容会在每天的设定时间自动运行iOS应用。可能您可以发送静默推送作为触发器,但是您应该真正计划在用户打开它而不是自动启动时使用该应用程序。任何时候敏感的离线处理都应由服务器完成......
您还可以查看使用func applicationSignificantTimeChange(_ application: UIApplication)
,以便在日期发生变化时告知应用程序,并结合application:didFinishLaunchingWithOptions:
中的常规处理。
答案 1 :(得分:0)
viewDidLoad仅被调用一次:当您的视图控制器被加载时。试图多次打电话会让你陷入困境。
通常你在viewDidLoad(应该只设置一次)的东西中设置一些东西,在viewDidAppear或viewWillAppear中设置其他东西(如果你的视图多次出现,可能会以不同的方式设置)。
创建一个新方法来执行您的设置,通常在viewDidAppear或viewWillAppear中,确保如果多次调用此代码没有问题。更改viewDidAppear或viewWillAppear以调用此方法。然后在viewDidLoad中创建一个定时器,它将在正确的时间调用它,并在dealloc中使定时器无效。
如果您的应用在后台,即使未加载视图,也不需要进行此操作。无论如何,没有人会注意到。当您的应用程序到达前台时(如果它应该被调用),将立即调用计时器,如果您的应用程序已关闭,则将调用viewDidAppear。