私は.NETWebアプリケーションのバックグラウンドを持っており、iOSの開発を始めたばかりです。私のアプリの初期設計は、NSNotificationCenterを中心にしています。NSNotificationCentreに到達することが初心者の一般的な間違いである方法を説明するさまざまな投稿を見るまで、私はこれにかなり満足していました。
これが私が対処しようとしている問題の単純化されたバージョンです:
私のアプリケーションは、Webサービス呼び出しを使用して入力されたメッセージのリストを表示しようとしています。Facebookメッセージングを考えてみてください。
アプリが最初に読み込まれると、サーバーからメッセージのコレクションがプルされ、ユーザーにテーブルに表示されます。ユーザーは(APIを介して返送される)新しいメッセージを追加でき、アプリはフィードに追加された新しいメッセージに関するプッシュ通知を受信できます。
メッセージがディスクに永続化されることはないので、モデルにPOCOを使用して、物事を単純にします。
メッセージフィードビュー(ストーリーボード内)への入力を担当するMessageFeedControllerがあります。また、現在取得されている値を格納し、さまざまなメソッドを持つメッセージフィードモデルもあります。
- (void)loadFromServer;
- (void)createMessage:(DCMMessage *)メッセージ;
- (void)addMessage:(DCMMessage *)メッセージ;
- (NSArray *)メッセージ;
- (int)unreadMessages;
私が持っている現在の実装はこれです:
ユースケース1:初期ロード
- ビューが最初に表示されると、「loadFromServer」メソッドが呼び出されます。これにより、メッセージコレクションにデータが入力され、NSNotificationCenterイベントが発生します。
- コントローラはこのイベントを監視し、受信するとテーブルビューにデータを入力します
ユースケース2:新しいメッセージ
- ユーザーが[追加]ボタンをクリックすると、新しいビューが表示され、メッセージを入力して[送信]をクリックすると、ビューが閉じられます。
- これにより、APIを呼び出すモデルのcreateMessageメソッドが呼び出されます
- 応答があると、モデルはNSNotificationCenterイベントを発生させます
- もう一度、MessageFeedControllerはこのイベントをリッスンし、テーブルに再入力します
ユースケース3:プッシュメッセージ
- アプリが開いている間にプッシュ通知が受信され、新しいメッセージの詳細が示されます
- AppDelegate(または他のクラス)は、モデルのaddMessageメソッドを呼び出して、モデルをコレクションに追加します
- 繰り返しになりますが、MessageFeedビューが開いていると仮定すると、再入力されます
3つのケースすべてで、MessageFeedビューが更新されます。これに加えて、BadgeManagerは、アプリアイコンバッジとタブバーバッジを設定する責任があるこれらのイベントもリッスンします。どちらの場合も、バッジ番号は未読メッセージの数に関連しています。
別のビューが開いていて、これらのイベントをリッスンしている可能性もあります。このビューにはメッセージの要約が保持されているため、コレクションがいつ変更されるかを知る必要があります。
そうです、私に固執してくれてありがとう、私の質問は次のとおりです。これはNSNotificationCentreの有効な使用法のように見えますか、それとも誤用しましたか?
私が懸念していることの1つは、メッセージテーブルの再入力の途中でメッセージコレクションが変更された場合にどうなるかが100%わからないことです。これが発生しているのを確認できるのは、新しいメッセージに関するプッシュ通知を受信した場合のみです。この場合、とにかくNSNotificationに基づいて行動する前に、テーブルの作成を終了する必要がありますか?
ご協力いただきありがとうございます
ダン。