iOS每5分钟检查一次

时间:2013-01-16 14:49:32

标签: ios objective-c core-data

我有一个应用程序可以创建消息,然后发送到主机服务器。

应用程序必须能够完全脱机工作,因此在创建消息(并存储到CoreData)时,它们被设置为“未发送”。该应用程序然后尝试立即发送它们。如果存在连接且服务器响应为肯定,则将消息设置为“已发送”。

当然,这意味着如果手机在创建消息时处于离线状态,则永远不会发送消息。

我的所有消息都是通过管理所有消息发送和排队的单例对象发送的。

我试图将NSTimer放入单例的init中,每隔5分钟触发一次发送(更改为10秒进行测试)。这可以正常工作,直到我停止应用程序的时间超过NSTimer的时间。

如果我停止应用程序30秒,然后重新启动它,则计时器不会触发。

有没有更好的方法来实现这一目标,以便获得相同的功能?即每隔几分钟检查一下外发消息并发送任何正在等待的消息。

修改

我没有使计时器或其他任何东西失效。只是如果应用程序在计时器因火灾时未处于活动状态,那么它似乎不再安排它。

NSTimer的代码是......

[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(sendMessages) userInfo:nil repeats:YES];

如果我将应用程序置于后台,然后在计时器到期之前将其激活,那么它将继续运行而没有任何问题。但是,如果我将应用程序置于后台然后等待30,那么当我返回应用程序时,计时器永远不会再次触发。

1 个答案:

答案 0 :(得分:4)

您可以收听这些NSNotifications,只需在应用离开并进入运行状态时无效并恢复计时器:

UIApplicationDidBecomeActiveNotification
UIApplicationWillResignActiveNotification

同时确保NSTimer的属性为strong,以便定时器不会被释放。

@property (strong) NSTimer *timer;

解决问题的另一种方法是使用第三方排队类或库。例如IFOfflineQueue