如何在 Swift 的准确时间安排 iOS 通话?
How to schedule an iOS call at an exact time in Swift?
这个问题有一些版本,OP 说的是 "how do I fire a method call inside my app at exactly 5pm?"
然后人们回答"how do you know your app will be open at 5pm"?这变成了另一个问题,原来的问题消失了。
所以我们请避免这种情况?
假设我想在 5:25pm 和我的用户在 5:25:28:50 打开应用程序时的 30 秒触发方法调用。
如果不清楚,我的意思是我想要 绝对时间 我可以使用我的用户是否在 5:25:26:35、[=42] 打开应用程序=],或 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
构造,以及我如何将小时和分钟添加到其中,c) milestone = dispatch_walltime(&ts, 0)
在 Swift.
中抛出错误
有人可以帮忙吗?如果可能,请使用 5:25pm 和 30 秒的具体示例?
根据时区和夏令时,为你想要的时间创建一个 NSDate(这有点棘手,但在 Whosebug 上有很多答案)。那么
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, ^ (...));
块将在您想要的时间发送,即使用户调整了两者之间的时钟。
只是说:dispatch_after 的行为因您创建 dispatch_time_t 的方式而异。 dispatch_time (DISPATCH_TIME_NOW, delta) returns 基于 mach_absolute_time 的时间。 dispatch_wall_time (...) returns 墙时间。 dispatch_after 根据给定的时间表现不同。
这个问题有一些版本,OP 说的是 "how do I fire a method call inside my app at exactly 5pm?"
然后人们回答"how do you know your app will be open at 5pm"?这变成了另一个问题,原来的问题消失了。
所以我们请避免这种情况?
假设我想在 5:25pm 和我的用户在 5:25:28:50 打开应用程序时的 30 秒触发方法调用。
如果不清楚,我的意思是我想要 绝对时间 我可以使用我的用户是否在 5:25:26:35、[=42] 打开应用程序=],或 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
构造,以及我如何将小时和分钟添加到其中,c) milestone = dispatch_walltime(&ts, 0)
在 Swift.
有人可以帮忙吗?如果可能,请使用 5:25pm 和 30 秒的具体示例?
根据时区和夏令时,为你想要的时间创建一个 NSDate(这有点棘手,但在 Whosebug 上有很多答案)。那么
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, ^ (...));
块将在您想要的时间发送,即使用户调整了两者之间的时钟。
只是说:dispatch_after 的行为因您创建 dispatch_time_t 的方式而异。 dispatch_time (DISPATCH_TIME_NOW, delta) returns 基于 mach_absolute_time 的时间。 dispatch_wall_time (...) returns 墙时间。 dispatch_after 根据给定的时间表现不同。