Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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 是否可以安排函数在特定时间运行_Ios_Swift_Unusernotificationcenter - Fatal编程技术网

Ios 是否可以安排函数在特定时间运行

Ios 是否可以安排函数在特定时间运行,ios,swift,unusernotificationcenter,Ios,Swift,Unusernotificationcenter,我一直在研究这个主题,想知道是否有可能计划一个函数在特定时间运行,就像您可以计划在特定时间触发本地通知一样。即使应用程序已关闭或处于后台,也需要运行此功能 用例: 我正在开发一个应用程序,该应用程序目前每天向用户发送一条随机消息,作为本地通知“来自一系列可能的消息”。此本地通知在用户从日期选择器指定的特定时间触发。即使应用程序关闭,所有这些都能按预期工作 现在,我正试图找出一种方法来显示应用程序中收到的最后一个随机通知的内容。我想在本地通知的body.content“random message

我一直在研究这个主题,想知道是否有可能计划一个函数在特定时间运行,就像您可以计划在特定时间触发本地通知一样。即使应用程序已关闭或处于后台,也需要运行此功能

用例:

我正在开发一个应用程序,该应用程序目前每天向用户发送一条随机消息,作为本地通知“来自一系列可能的消息”。此本地通知在用户从日期选择器指定的特定时间触发。即使应用程序关闭,所有这些都能按预期工作

现在,我正试图找出一种方法来显示应用程序中收到的最后一个随机通知的内容。我想在本地通知的body.content“random message”中设置标签文本。。。但只有在他们收到通知之后。我不想在它交付之前在应用程序中显示它。示例:用户打开应用程序,设置在下午3点接收的本地通知时间。用户关闭应用程序,在下午3点收到通知,他们在下午4点打开应用程序,应用程序内的标签显示与他们收到的通知相同的消息。应用程序中的消息应保持不变,直到第二天下午3点,因为本地通知设置为重复

问题在于,显然您无法检索已传递的本地通知的内容。这就是为什么我想知道是否有可能在特定的时间安排一个功能。如果是这样,我可以将生成的消息保存为userdefault值,然后在5秒钟内触发UNTimeIntervalNotification并使用相同的保存值。当应用程序打开时,我可以使用保存的值更新label.text。这样,每次他们打开应用程序时,应用程序中的标签将始终与上次收到的通知相同


我是swift语言的新手,如果您对该问题的可能解决方案有任何其他建议,我们将不胜感激。

您需要执行一系列操作,这取决于您希望函数执行的操作。原因是,当应用程序被后台处理时,所有进程最初都会暂停,直到应用程序再次进入前台。你可以让应用程序在后台运行,但它们必须遵循苹果的规则(如果你不这样做,那么你的应用程序将不会在应用商店中被接受)。例如,您可以在应用程序处于后台时播放音频。一旦你制作了你的应用程序,使它可以在后台运行,那么你需要在特定的时间调用该函数。使用通知会很好,但实际上这将是您的首选。至于在应用程序关闭时运行函数,我认为您的应用程序不应该这样做。

如果您希望在特定时间运行代码,那么您应该使用Timer类。它非常适合在特定的时间间隔重复执行代码,但也非常适合在指定的确切时间运行代码

这是通过使用计时器构造函数来完成的,该构造函数接受计时器应该触发的日期。你可以随意安排这个日期,这正是这种方法如此灵活的原因

作为一个简单的示例,这将创建一个计时器,在五秒钟内调用runCode()方法:

let date = Date().addingTimeInterval(5)

let timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(runCode), userInfo: nil, repeats: false)

RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)

您可以在后台执行模式下启动计时器

1) 您需要选择在后台执行
beginBackgroundTaskWithExpirationHandler

2) 在主线程上创建
计时器
,或者需要使用

RunLoop.main.add(timer, forMode: .defaultRunLoopMode)
注意: 你必须知道一些关于背景模式的事情

  • 应用程序只需要10分钟(iOS 7中只有3分钟)的后台 执行-在此之后,计时器将停止触发
  • 从iOS 7开始,当设备被锁定时,它将暂停前台 应用程序几乎立即启动。iOS 7应用程序启动后,计时器将不会启动 锁着的
关闭状态


在应用程序未激活时运行计时器没有意义。

“即使应用程序关闭或在后台也需要运行计时器。”这在技术上没有意义。此外,您甚至没有指定您的开发平台。更新了更多详细信息,不确定这有什么意义,您能解释一下吗?或者提供一个解决方案?你在试图做的事情上走错了方向。您可以在应用程序打开时确定消息,安排本地通知,并将消息存储在UserDefaults或其他文件中。没有必要在给定时间运行函数。@EmilioPelaez您如何建议仅在发送通知后使用该UserDefaults值?否则,如果他们在发送通知之前再次打开应用程序,我会在应用程序发送之前显示存储的消息。这是事实,也是一种方法。但是,如果应用程序挂起(后台),计时器将失效。此外,您的控制也会受到限制,因为您无法收到通知,但必须事先指定时间。在我个人的许多案例中,在需要调用函数之前,你并不总是知道确切的时间。是的,我也从这篇文章中读到了这一点,但是如果应用程序关闭,这就不起作用了。更新的问题包含更多详细信息。更新的问题包含更多详细信息。