0

私と私のチームは現在、Objective-C の新人開発者 (入社から 3 か月未満) で、ネットワーク機能を備えたシンプルなタブ ベースのアプリの開発に取り組んでいます。このアプリには、テーブル ビューと対応する詳細ビューが各タブに表示されるナビゲーター コントローラーが含まれています。対象は iOS 4 SDK です。

ネットワーク側では、各テーブル ビューに必要なデータを取得するために、各ビューの NSURLConnection を処理するシングルトンとして機能する単一のクラスがあります。

機能は正常に動作し、データを正しく取得できますが、ユーザーが請願が終了するか、同じ請願のボタン (例: ログイン ボタン) が再度押されるまでビューを変更しない場合に限られます。そうしないと、さまざまな間違いが発生する可能性があります。たとえば、いずれかのナビゲーション コントローラーのルート ビューにのみ表示されるべきエラー メッセージが詳細ビューに表示されたり、その逆のエラー メッセージが表示されたりします。

問題は、現在「アクティブ ビュー」のシングルトンで単一のデリゲートしか処理していないことであり、ネイティブ メール アプリに基づいた動作をサポートするように変更する必要があるのではないかと考えています。ビューのそれぞれで要求されたものは、個別に正しくロードおよび更新され続けます。

私たちは、stackoverflow や他の Web サイトを調べましたが、従うべき適切な方法論が見つかりませんでした。NSOperationQueue を使用し、NSOperation で NSURLConnections をラップすることを検討していましたが、それが適切なアプローチであるかどうかはわかりません。

ユーザーの操作の気まぐれで、複数の非同期 NSURLConnections を処理して、親と子の両方の複数のビューをほぼ同時に更新する適切な方法について、誰か提案はありますか? 理想的には、推奨されているように、UI をブロックしたり、ボタンを無効にしたりしたくありません。

お時間をいただきありがとうございます!

編集 - 追加するのを忘れました。クライアントによって設定されたプロジェクトの制限の 1 つは、ネイティブの iOS SDK ネットワーク フレームワークのみを使用でき、ASIHTTPRequest フレームワークなどは使用できないということです。同時に、情報をアップロードするのではなく、WS から情報を取得するだけであることを忘れていました。

4

2 に答える 2

2

1 つの提案は、NSOperations と NSOperationsQueue を使用することです。この配置の良いところは、処理中またはキューに入っている作業をすばやくキャンセルできることです (たとえば、ユーザーが [戻る] ボタンを押した場合)。

github にはNSOperation-WebFetches-MadeEasyというプロジェクトがあり、これを可能な限り簡単に行うことができます。クラスに 1 つのクラス (OperationsRunner) を組み込みます。このクラスには、OperationsRunner.h の「使用方法」が付属しており、2 つのスケルトン NSOperations クラス (1 つは別のサブクラス) で、サブクラスは画像の取得方法を示します。

他の人が他のソリューションを投稿すると確信しています-これを行うライブラリとプロジェクトが多数あるため、開始するのはほとんど問題です。そうは言っても、OperationsRunner は 100 行を少し超えるコードであり、操作もほぼ同じであるため、非常に読みやすく、理解し、使用し、変更するのが簡単です。

于 2012-08-24T16:30:35.787 に答える
0

あなたのシングルトンにはデリゲートがあると言います。複数のオブジェクトが結果に関心がある場合、委譲は不適切です。データのフェッチに引き続きシングルトンを使用する場合は、パターンを通知に基づくように切り替える必要があります。シングルトンには、どの接続がどのタスクに対応するかを判断し、投稿する適切な通知を選択する責任があります。

これについてまだサポートが必要な場合は、お知らせください。サンプル コードを投稿してみます。

于 2012-08-26T22:21:42.350 に答える