0

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

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

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

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

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

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

有没有更好的方法可以让我获得相同的功能?即每隔几分钟检查一次传出消息并发送任何正在等待的消息。

编辑

我没有使计时器或任何东西无效。只是如果在计时器即将触发时应用程序未处于活动状态,那么它似乎不会再次安排它。

我的代码NSTimer是...

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

如果我将应用程序置于后台,然后在计时器触发之前使其处于活动状态,那么它将继续运行而没有问题。但是,如果我将应用程序置于后台,然后等待 30 分钟,那么当我返回应用程序时,计时器将不再触发。

4

1 回答 1

4

NSNotifications当应用离开并进入运行状态时,您可以收听这些并简单地使计时器无效并恢复:

UIApplicationDidBecomeActiveNotification
UIApplicationWillResignActiveNotification

还要确保 的属性NSTimerstrong这样的,这样计时器就不会被释放。

@property (strong) NSTimer *timer;

解决您的问题的另一种方法是使用 3rd-party 排队类或库。例如IFOfflineQueue

于 2013-01-16T14:56:23.973 回答