0

Webサーバー上のXMLファイルからさまざまな座標を取得し、情報を解析して画面に表示するiPadアプリを作成しています。

データを継続的に、たとえば1秒ごとに更新する方法についてのヒント/提案があるかどうか疑問に思いました(コンピュータープログラムがサーバー上のXMLファイルを数秒ごとに更新するため)。ありがとう!

4

3 に答える 3

2

これには間違いなくマルチスレッドのバックグラウンド操作を実装する必要があります。そうしないと、アプリが完全に応答しなくなります。先に進む前に、アプリの実行全体についてサーバーに常にクエリを実行することは悪い考えであると述べておく必要があります。データをかみ砕くだけでなく、Wi-Fi/3G/4G アンテナを常に稼働させておく必要があるため、ユーザーのパフォーマンスが低下します。バッテリーがはるかに速くなります。

要件を緩和して、たとえば 10 秒ごとにデータを取得することを検討します (サーバーは数秒ごとにデータを更新するだけであり、現在取得されている座標をダウンロードしてレンダリングする時間を考慮に入れる必要があるため)、または待機することさえできます。ユーザーが更新ボタンなどを押すため。

現状の質問に答えるために、これを行うにはいくつかの方法がありますが、最も簡単なのはおそらくASHTTPRequestのようなフレームワークを使用することです(ただし、現在のプロジェクトではAFNetworkingのようなライブラリがあります)。それらは、他の多くの便利なネットワーク機能の中で、サーバーからのデータの非同期ダウンロードを処理します。

要件に対する理想的なプロセスは次のようになります。

  1. NSOperationQueue (または追加されたネットワーク ライブラリからのキュー) を作成します。
  2. NSTimer を使用して、サブクラス化された NSOperation を作成し続けて、サーバーからのダウンロードを行います (または、ネットワーク ライブラリからの同等の機能)。x秒ごとに、この要求をキューに送信します。
  3. ダウンロードが完了したら、UI を新しいデータで更新します (UI を変更する機能はメインスレッドから実行する必要があることに注意してください。したがって、NSOperation/etc でこれを処理する場合は、performSelectorOnMainThreadまたは同等のものを使用する必要があります! )

それが役立つことを願っています! 外部ライブラリを含めたくない場合は、NSURLConnection を実行するサブクラス化された NSOperation のインスタンスを作成し、それらを NSOperationQueue に送信して同時に実行する小さなサンプル プロジェクトを用意しました。一度に 1 つの操作のみを実行するように簡単に変更し、NSURLConnection を変更してサーバー データをダウンロードして解析し、メイン スレッドを更新することができます。興味のある方はこちら。

于 2012-07-13T02:01:27.530 に答える
2

NSTimerとそのscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:方法を見てください

実用的な解決策は

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:refreshData userInfo: nil repeats:YES ]

および呼び出し元オブジェクトのメソッド

-(void) refreshData {
    //Do your call here
}
于 2012-07-13T02:01:32.557 に答える
0

サーバーで新しいデータの準備ができたら、デバイスにプッシュ通知を発行することを検討してください。

これにより、デバイスの電力が節約され、サーバーの負荷が 1 トン節約されます。通常、プッシュが到着するまでに 1 秒程度しかかからないため、遅延は悪くありません。

唯一の注意点は、ユーザーがプッシュ通知の許可を拒否した場合に備えて、何らかのポーリングも実装する必要があることです。しかし、それらの場合は、長いポーリング サイクルを使用して、プッシュ サポートを有効にすると更新がはるかに高速になることを伝えることができます...

于 2012-07-13T04:31:32.257 に答える