如何使用 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 在特定时间执行操作?的主要内容,如果未能解决你的问题,请参考以下文章