在斯威夫特日常执行的具体方法(Executing a specific method daily i

2019-10-24 02:38发布

我想知道你将如何去具有执行每日一次的功能。 在我的情况,我想用户回答日常问题,答案会留在用户一天。 第二天,一个新的问题将被要求等等。 有人告诉我,当用户不使用的应用程序,你不能执行的功能。 所以我在想,如果有一种方法来设置期满的定时器(如24小时),基本上删除答案吗? 如果有什么办法,你会去这个问题,我真的很感激,学习你们形式。

目前我使用Parse.com取回我的问题,我不确定是否我应该保存的答案回在解析或让他们如因NSUserDefaults的我不知道如何去上述的问题。

Answer 1:

有几个办法:

  • 本地通知:您可以安排本地通知(如果用户授予权限的通知的应用程序)会在某个预定的时间呈现通知给用户。 如果用户点击的通知,该应用程序将被打开。 (如果用户没有在通知自来水,但是,应用程序将无法打开。)

    见本地和远程通知编程指南 。

  • 背景获取:您可以将应用程序请求后台获取能力,其中操作系统将允许应用做出非常快的网络请求,看看是否有任何数据检索。 您可以使用本地通知结合这让用户知道什么时候有可用的新问题。 请注意,你无法控制的这个时机,所以它不能保证在一个一致的时间,每天每天发生,要少得多。 然而,这对于应用程序来检查新数据,而不必运行应用程序本身的用户一个简单的方法。

    见数据撷取少量投机的应用程序编程指南适用于iOS英寸

  • 与本地通知,你也可以使用招待推送通知(其中当有可用的新问题,Web服务会主动通知用户)。 该推送通知服务是上述讨论的本地和远程通知编程指南 。

  • 当用户启动应用程序,你可以比较当前日期和时间与上次已知问题相关的日期和时间,以查看是否存在最后一个问题,或者你是否发起网络请求,以获得下一个。

  • 关于在哪里存储的答案, NSUserDefaults几乎可以肯定是放错了地方。 如果你想在本地保存它,将它保存到永久存储(归档等),或使用核心数据。 保存回网络已经美德,不过,可能性要同步的跨设备应用程序的问题和答案的状态。



Answer 2:

你可以做到这一点无论哪种方式(它保存在解析或NSUserDefaults )。 至于提出一个问题,每天一次,你需要首先确认你一旦用户回答一个问题,每次时间戳,然后检查你的最后时间戳大于24小时。

所以,你(大致)说这句话:

OBJ-C:

const uint DAY_IN_SECONDS = 24 * 60 * 60;
if (fabs([lastTimeTheUserAnsweredTimestamp timeIntervalSinceNow]) > DAY_IN_SECONDS) {
   // present today's question.
} else {
   // you've already answered today's question.
}

迅速:

let DAY_IN_SECONDS = 24 * 60 * 60;
if (fabs(lastTimeTheUserAnsweredTimestamp.timeIntervalSinceNow()) > DAY_IN_SECONDS) {
   // present today's question.
} else {
   // you've already answered today's question.
}

当然,这是假设lastTimeTheUserAnsweredTimestamp是一个NSDate。



文章来源: Executing a specific method daily in Swift
标签: swift parsing