如何使用 NSTimer 在特定时间执行操作?

Posted

技术标签:

【中文标题】如何使用 NSTimer 在特定时间执行操作?【英文标题】:How to perform an action at a certain time with NSTimer? 【发布时间】:2013-03-11 00:33:14 【问题描述】:

我正在尝试在一天中的某个时间执行一项操作。

我不想使用UILocalNotification,因为我不希望用户在发生任何事情时离开。

我当前的代码是:

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(fire:) userInfo:nil repeats:NO];

【问题讨论】:

请展示您正在使用网络套接字做什么以及它如何在此处发挥作用。我不知道您所说的“使用网络套接字”是什么意思,以及这与您发布的关于设置计时器触发的代码行有何关系。需要有关您正在做什么的更多详细信息,以及具体是什么不起作用。 (也就是说,调试你所拥有的,而不是提供不同的解决方案;我没有自己的解决方案可以提供,但可能会发现你正在使用的代码有问题......) 很抱歉,这对人们给我答案有何帮助?我正在寻找的只是一种在特定时间执行和行动的方式。 “使用网络套接字”与答案无关。如果您想查看我的 websocket,请查看 SocketRocket。 谢谢比尔帕特森 :) 你知道,没关系。对不起,我帮不了你。 这是你的忍者编辑 :D "假礼貌是如此可爱。'爱你!:-)" 无论如何,谢谢比尔,我只是觉得奇怪的是一个陌生人要求我的代码与问题无关,我不应该提到 websockets。 【参考方案1】:

你可以:

    每次您的应用启动时,在application:didFinishLaunchingWithOptions 方法中使用[NSDate date] 提取当前本地时间。

    使用dateWithTimeInterval:sinceDate计算报警时间的剩余时间。

    interval = that_time_difference 开始NSTimer

我不知道你是什么意思:

“我不希望用户远离任何发生的事情。”

我假设您不希望在应用未运行时发生任何事情。我唯一能想到的就是推送通知。

【讨论】:

嘿Dsaw,我是这样做的,现在的动作大约是10ms,这可能是由于使用了模拟器和我的iPhone。我所做的是,从服务器发送带有我的消息的时间戳。然后在我的设备上,我计算本地时间戳,然后比较这两者并将差异设置为我的延迟。我不确定如何在您的解决方案中执行 b) 部分,您能否澄清一下?抱歉,我完全是个菜鸟 b) 正在寻找时差。 NSDate *currentDate = [NSDate 日期]; NSDate *actionDate = [NSDate dateWithString:@"..."]; //timestamp_from_server CGFloat timeDiff = [actionDate timeIntervalSinceDate:currentDate]; [NSTimer scheduleTimerWithTimeInterval:timeDiff target:self 选择器:@selector(fire:) userInfo:nil repeats:NO];

以上是关于如何使用 NSTimer 在特定时间执行操作?的主要内容,如果未能解决你的问题,请参考以下文章

对由 NSTimer 异步发送的 NSNotification 进行单元测试

如何在特定时间显示自定义警报?

如何在后台使用 nstimer

如何让我的应用在后台运行 NSTimer?

如何停止 NSTimer

如何暂停/播放 NSTimer?