Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Grand Central Dispatch每天在同一时间安排功能_Ios_Swift_Grand Central Dispatch - Fatal编程技术网

Ios 使用Grand Central Dispatch每天在同一时间安排功能

Ios 使用Grand Central Dispatch每天在同一时间安排功能,ios,swift,grand-central-dispatch,Ios,Swift,Grand Central Dispatch,我读过这个答案,我不相信它有我想要的,但我是一个初学者,我很高兴有人在这个链接中指出答案: 我的目标是:设置一个函数,每天早上9点在用户时区或系统时区运行 我使用GCD非常简单地延迟了一个函数,如下所示:它工作得非常好: var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(10 * Double(NSEC_PER_SEC))) dispatch_after(dispatchTime,

我读过这个答案,我不相信它有我想要的,但我是一个初学者,我很高兴有人在这个链接中指出答案:

我的目标是:设置一个函数,每天早上9点在用户时区或系统时区运行

我使用GCD非常简单地延迟了一个函数,如下所示:它工作得非常好:

    var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(10 * Double(NSEC_PER_SEC)))
    dispatch_after(dispatchTime, dispatch_get_main_queue(), {
        let alert = UIAlertView()
        alert.title = "Foo Alert"
        alert.message = "foo."
        alert.addButtonWithTitle("OK")
        alert.show()

        AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
    });
所以我想像我上面提到的那样每天启动它,但我首先要做的是现在将DISPATCH\u TIME\u替换为与时区相关的值?我是否需要考虑时区,或者仅仅用军事09:00替换DexChyTimeSO就足够了?

此外,如果您对总体目标、每天同一时间发射功能的安排有任何建议,我们将不胜感激


我也不习惯使用GCD来实现这一目标,但这是我在搜索中遇到的最多的一个。简而言之,除非应用程序仍在运行,否则你通常无法在任意时间执行任意功能。之后的调度假定应用程序仍在计划时间运行,这通常无法保证。之后的调度非常适合在x秒内完成任务,而不是在明天上午9点完成任务

是的,dispatch_after可以在某个后台线程上执行某些任务,但这与在后台运行应用程序(即应用程序本身不再位于前台)的概念截然不同。请参阅,其中列举了各种后台机制

在应用程序当前未处于活动状态时执行某些操作的关键技术包括:

使用后台获取,您可以在服务器上偶然检查新数据,但不是按照您的计划,而是由操作系统自行决定

如果您的应用程序正在执行多个非常特定的任务,例如音乐应用程序、VOIP、导航应用程序等,您可以注册后台操作

您可以安排在特定时间触发本地通知,但用户有义务查看通知并点击该通知以使应用程序运行。有关更多信息,请参阅

您可以注册推送通知,然后服务器可以在您选择的某个时间向客户端推送通知,但这需要服务器端开发

还有其他可以配置的后台任务,例如,在后台继续网络请求,请求几分钟来完成一些有限长度的任务,即使应用程序不再处于活动状态,等等,但这些任务似乎与您的问题无关


如果你能澄清你希望应用程序在预定时间做什么,我们可能会建议什么是可能的,什么是替代方案。但是,在粗略的笔划中,这些是你的基本选择

简而言之,除非应用程序仍在运行,否则通常无法在任意时间执行任意功能。之后的调度假定应用程序仍在计划时间运行,这通常无法保证。之后的调度非常适合在x秒内完成任务,而不是在明天上午9点完成任务

是的,dispatch_after可以在某个后台线程上执行某些任务,但这与在后台运行应用程序(即应用程序本身不再位于前台)的概念截然不同。请参阅,其中列举了各种后台机制

在应用程序当前未处于活动状态时执行某些操作的关键技术包括:

使用后台获取,您可以在服务器上偶然检查新数据,但不是按照您的计划,而是由操作系统自行决定

如果您的应用程序正在执行多个非常特定的任务,例如音乐应用程序、VOIP、导航应用程序等,您可以注册后台操作

您可以安排在特定时间触发本地通知,但用户有义务查看通知并点击该通知以使应用程序运行。有关更多信息,请参阅

您可以注册推送通知,然后服务器可以在您选择的某个时间向客户端推送通知,但这需要服务器端开发

还有其他可以配置的后台任务,例如,在后台继续网络请求,请求几分钟来完成一些有限长度的任务,即使应用程序不再处于活动状态,等等,但这些任务似乎与您的问题无关


如果你能澄清你希望应用程序在预定时间做什么,我们可能会建议什么是可能的,什么是替代方案。但是,在粗略的笔划中,这些是你的基本选择

重要的是,您应该使用分派时间而不是分派时间。区别在于:如果您将dispatch_时间设置为从现在起1000秒,那么如果您的应用程序正在运行,它将从现在起运行1000秒。但dispatch_walltime将计算用户时钟上的时间,并在使用时运行 r的钟到了那个时间


因此,如果您将调度时间设置为明天上午9点,而我将设备上的时钟向前设置了5分钟,那么调度时间将在我的时钟显示为上午9:05时运行。调度时间为上午9:00。如果我把时钟从早上8点55分改为9点05分,你必须要试验会发生什么,因为当时钟显示9点时运行显然是不可能的

重要的是,您应该使用分派时间而不是分派时间。区别在于:如果您将dispatch_时间设置为从现在起1000秒,那么如果您的应用程序正在运行,它将从现在起运行1000秒。但dispatch_walltime将计算用户时钟上的时间,并在用户时钟到达该时间时运行

因此,如果您将调度时间设置为明天上午9点,而我将设备上的时钟向前设置了5分钟,那么调度时间将在我的时钟显示为上午9:05时运行。调度时间为上午9:00。如果我把时钟从早上8点55分改为9点05分,你必须要试验会发生什么,因为当时钟显示9点时运行显然是不可能的