0

複数のViewControllerクラスがあるチャットアプリケーションを開発しています。また、サーバーとクライアント間で通信が行われるジェネリッククラスもあります。この通信クラスは、さまざまな理由ですべてのView Controllerによってアクセスされるため、どのViewControllerにアクセスされているかを知ることはありません。この状況では、通信クラスでエラーが発生するとすぐに、「接続に失敗しました」、「インターネットに失敗しました」、「データに失敗しました」、「チャットに失敗しました」などの状態をすべてのViewControllerに更新する必要があります。 。シングルトンクラスにフラグを設定して他の場所にアクセスする(またはシングルトンよりも非常に安全な)プロトコルを使用して通信クラスにステータスフラグを設定することで解決しようと考えています。

誰かが私が実装するのに正しい角度で考えていて、これらのアプローチで達成できるかどうか私にアドバイスできますか?

4

2 に答える 2

2

通知を見てください。通知は、まさにこのように複数のインスタンスに一般的に配布されることを目的としています。のドキュメントを参照してくださいNSNotificationCenter

誤解されているように思われるので、通知はハードウェアイベントだけのものではありません。委任が個々のオブジェクトが別のオブジェクトの動作を管理できるようにする汎用メカニズムであるのと同様に、これらは情報を配布するための汎用ブロードキャストメカニズムです。

つまり、通信ハンドラーは状態変更の通知を投稿する必要があり、他のコントローラーはすべてその通知を受信するように登録する必要がありますが、適切に応答できます。

投稿例; ファイルの読み込みが完了したら、次のように入力します。

    [[NSNotificationCenter defaultCenter] postNotificationName:@"PDLAssetManagerAssetFileLoaded" object:self];

そして、ロードが完了したときにそれ自体を更新する必要がある各コントローラーに、次のように入力します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadComplete:) name:@"PDLAssetManagerAssetFileLoaded" object:nil];

ここloadComplete:で、は通知を引数として受け取り、必要な処理を実行するメソッドです。ここでは無視したuserInfoディクショナリを使用して追加のデータを渡すことができます。 ヒント:通知名の文字列を定数にします。簡潔にするために、これはスキップしました。

于 2012-09-29T20:16:13.823 に答える
0

NSNotificationCenterの代わりに、これを使用できます。

1-コミュニケーションクラスへのデリゲートを実装します。

2-要求されたケースが発生したときにコールバックを実装します(接続障害など)

3-アプリケーションデリゲートをコミュニケーションクラスのデリゲートとして設定します

4-コールバックが発生したら、アプリケーションデリゲートからどのView Controllerを使用しているかを確認し、アクションを実行します。

于 2012-09-29T20:24:40.317 に答える