0

iPhoneでメールアプリのデザインを複製しようとしています。ツールバーのラベルが更新/変更され、送信されているメールのステータスが表示されます。

これを複製する最良の方法は何ですか?以下は私が考え抜いたことであり、おそらく誰かがそれらの1つが機能する理由や新しいアイデアを提案することができます。

団結のために、私が次の見解を持っているとしましょう:A -> B -> C - DA、、、BおよびCはUINavigationControllerにプッシュされ、UINavigationControllerからプッシュされ、問題のツールバーがあります。Dは「作成」ウィンドウであり、のモーダルウィンドウですC。そして、私が作成しようとしているオブジェクトをと呼びましょうobj

委任

これには、を作成objして、、Aに渡す必要がBありCます。onCなどのメソッドを呼び出し、電子メールを送信しようとします。'obj'には、ツールバーを更新するためにデリゲートされたクラス()に配列を送信するデリゲートメソッドがあります。送信プロセスを通じて、進行状況バーを更新するために複数のメッセージを送信し、最後に、送信が成功したか、最後の電子メールチェックが行われた日付を通知します。sendMailobjobj:hasUpdateForToolbar:C

このソリューションの問題は、更新されないことAですB。ポップオフCされると、デリゲートを再割り当てする必要がありB、次の値がによってプッシュされる前に、ツールバーに古い値が点滅します(私は思います)obj

通知

これは、オブジェクトをすべてのクラスに渡す必要がないという点でデリゲートよりもクリーンです。つまり、クラス間の依存関係が少なくなります)。ただし、接続がないためC、新しいメールを送信する準備ができているという通知を投稿する必要があります。objその通知を受信して​​から、デリゲートメソッドの代わりに新しい通知を投稿する必要があります。

これに伴う問題は、ビューが表示されていないときに通知の購読を解除するのが一般的な方法であるということです。Bしたがって、通知をサブスクライブして、ツールバーの次の更新がプッシュされるのを待つのと同じフラッシュがあると思います。

KVC

Key-Valueコーディングで処理できるように、これをどのように設定できるかはよくわかりません。obj各ビューのツールバーに配置され、更新されると(ラベルまたはプログレスバーのいずれかで)、すべてのツールバーに反映されるビューを設定できますか?

それで、どれが最高です/私はこれらに何が欠けていますか?

4

1 に答える 1

0

アプリケーションコントローラーがあります(AppDelegateまたは別のグローバルに表示されるオブジェクトである可能性があります)。

このアプリケーションコントローラーは、モデル(電子メールのフェッチ、電子メールの送信など)とUI(作成画面、UINavigationController、ViewControllersなど)の作成を担当します。このアプリケーションコントローラーは、ツールバーの内容([再読み込み]ボタンと[作成]ボタン、およびステータス領域)も担当します。

ナビゲーションスタックのビューコントローラーは、このツールバーの内容を気にする必要はありません。アプリケーションコントローラーからツールバー項目(作成、再読み込み、ステータス)を取得するだけです。

アプリケーションコントローラーだけで、モデルのステータス(送信、受信など)に基づいてツールバーのステータス領域の内容が更新されます。アプリケーションコントローラーとそのモデル間の通信は、通常のKVOまたは通知になります。

于 2010-12-10T23:05:50.137 に答える