gpt4 book ai didi

ios - 如何在 Swift 中的确切时间安排 iOS 通话?

转载 作者:行者123 更新时间:2023-12-01 17:51:20 26 4
gpt4 key购买 nike

在这个问题的某些版本中,OP 会说“我如何在下午 5 点在我的应用程序中触发方法调用?”

然后人们会回答“你怎么知道你的应用会在下午 5 点打开”?这变成了另一个问题,原来的问题消失了。

所以让我们避免这种情况?

假设我想在我的用户在 5:25:28:50 打开应用程序时恰好在下午 5:25 和 30 秒触发一个方法调用。

如果不清楚,我的意思是我想要我可以使用的绝对时间,无论我的用户是在 5:25:26:35、5:25:20:13 还是 5:29:49:99 打开应用程序.

阅读所有 SO,似乎共识(和 Apple 文档建议)是使用某种形式的 mach_absolute_time 和 dispatch_somethingOrOther。我只是找不到任何真实的、具体的例子。

我找到的最接近的是 http://www.manpagez.com/man/3/dispatch_walltime/ ,这给出了这个例子:

 Create a milestone on Tuesday, January 19, 2038:

struct timespec ts;
ts.tv_sec = 0x7FFFFFFF;
ts.tv_nsec = 0;
milestone = dispatch_walltime(&ts, 0);

我就像“ Eureka !”直到我意识到 a) 我不知道如何将 2038 年 1 月 19 日转换为 0x7FFFFFFF 的十六进制转换,b) 我不明白 timespec 是如何进行的struct 已构建,我将如何在其中添加小时和分钟,以及 c) milestone = dispatch_walltime(&ts, 0)在 Swift 中引发错误。

任何人都可以帮忙吗?如果可能,以下午 5:25 和 30 秒的具体示例为例?

最佳答案

根据时区和夏令时为您想要的时间创建一个 NSDate(这有点棘手,但 Stackoverflow 上有很多答案)。然后

   struct timespec ts;
ts.tv_sec = (int64_t) [date timeIntervalSince1970];
ts.tv_nsec = 0;
milestone = dispatch_walltime(&ts, 0);
dispatch_after (dispatch_get_main_queue (), milestone, ^ (...));

即使用户在两者之间调整时钟,该 block 也会在您想要的时间发送。

只是说:dispatch_after 的行为会根据您创建 dispatch_time_t 的方式而有所不同。 dispatch_time (DISPATCH_TIME_NOW, delta) 返回基于 mach_absolute_time 的时间。 dispatch_wall_time (...) 返回一个挂墙时间。 dispatch_after 的行为取决于给出的时间。

关于ios - 如何在 Swift 中的确切时间安排 iOS 通话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29684163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com