我有一个应用程序可以创建消息,然后发送到主机服务器。
应用程序必须能够完全脱机工作,因此在创建消息(并存储到CoreData)时,它们被设置为“未发送”。该应用程序然后尝试立即发送它们。如果存在连接且服务器响应为肯定,则将消息设置为“已发送”。
当然,这意味着如果手机在创建消息时处于离线状态,则永远不会发送消息。
我的所有消息都是通过管理所有消息发送和排队的单例对象发送的。
我试图将NSTimer放入单例的init中,每隔5分钟触发一次发送(更改为10秒进行测试)。这可以正常工作,直到我停止应用程序的时间超过NSTimer的时间。
如果我停止应用程序30秒,然后重新启动它,则计时器不会触发。
有没有更好的方法来实现这一目标,以便获得相同的功能?即每隔几分钟检查一下外发消息并发送任何正在等待的消息。
修改
我没有使计时器或其他任何东西失效。只是如果应用程序在计时器因火灾时未处于活动状态,那么它似乎不再安排它。
我NSTimer
的代码是......
[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(sendMessages) userInfo:nil repeats:YES];
如果我将应用程序置于后台,然后在计时器到期之前将其激活,那么它将继续运行而没有任何问题。但是,如果我将应用程序置于后台然后等待30,那么当我返回应用程序时,计时器永远不会再次触发。
答案 0 :(得分:4)
您可以收听这些NSNotifications
,只需在应用离开并进入运行状态时无效并恢复计时器:
UIApplicationDidBecomeActiveNotification
UIApplicationWillResignActiveNotification
同时确保NSTimer
的属性为strong
,以便定时器不会被释放。
@property (strong) NSTimer *timer;
解决问题的另一种方法是使用第三方排队类或库。例如IFOfflineQueue。