0

メッセージを作成してホストサーバーに送信するアプリがあります。

アプリは完全にオフラインで動作できる必要があるため、メッセージが作成される(およびCoreDataに保存される)と、メッセージは「未送信」として設定されます。その後、アプリはそれらを即座に送信しようとします。接続があり、サーバーの応答が肯定的である場合は、メッセージを「送信済み」に設定します。

もちろん、これは、メッセージの作成時に電話がオフラインの場合、メッセージが送信されないことを意味します。

すべてのメッセージは、すべてのメッセージ送信とキューイングを管理するシングルトンオブジェクトを介して送信されます。

私はNSTimerを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

また、タイマーが解放されないようにのプロパティを確認してNSTimerください。strong

@property (strong) NSTimer *timer;

問題を解決する別の方法は、サードパーティのキュー クラスまたはライブラリを使用することです。たとえばIFOfflineQueue

于 2013-01-16T14:56:23.973 に答える