2012-03-27 2 views
4

私はiPhoneアプリケーションに取り組んでおり、できるだけMVCに準拠しようとしています(私はまだ学んでいます)。私は数秒を表す符号なし整数をデータモデルに持っています。私はこれを '00:00'(分:秒)の形式で表示します。私の質問は、このフォーマットはどこで行われるのですか? この形式で提供できるのはモデルオブジェクトの責任ですか? コントローラーはモデルから取り出した後、ビューに渡す前にフォーマットしますか? ビューで書式設定が処理されますか?Objective-Cを使用したMVCビューの書式設定データはどこで行われますか?

ありがとうございました。

答えて

4

このフォーマットが1か所でのみ使用される場合、最適な解決策はフォーマットに書式を付けることです。このアプローチはしばしば非常にうまく機能します。ただし、カスタム表示がない場合は、この作業をView Controllerに組み込むのが自然です。 CocoaのMVCのバージョンでは、View Controllerはビューをどのように管理するかに柔軟に対応できます。 (これは、CocoaのMVCとSmallTalkのMVCが異なる点です)

しかし、ビュー(またはビューコントローラ)間で同じ書式を共有する場合はどうなりますか?その後、フォーマットコードをNSFormatterサブクラスに分解します(または、あなたのケースでは既存のNSDateFormatterを使用します)。これらを渡したり、イヤーズに入れたり、シングルトンを作成してそれらを保持することさえできます。

この場合、モデルに入れるのはなぜですか?まあ、このように時間を示す4つのビューがあるとしますが、時間を00:00.0として表示する2つのビューを追加し、時間と分を表示する1つのアキュムレータビューがあります。これらのケースを処理するためにモデルを拡張し続ける必要があります。このモデルでは、ビューに関する情報がますます多く集められています。フォーマッタで書式設定を保持すると、これらの詳細をモデルに汚染させることなく、コード(およびバグ修正)を共有することができます。非常に特殊な書式設定が必要なビューでも、独自のカスタムコードを使用できます。

フォーマットの種類ごとに別々のNSFormatterサブクラスを作成する必要はありません。 MYObjectFormatterクラスを作成して、「時間」、「分」、「秒」などのオプションを使用できます。この点についてはNSDateFormatterのように動作し、必要な使いやすさを与えながら書式設​​定コードを保持しますモデルの外に出る。これはちょうどNSDateNSDateFormatterがどのように分割されているかです。

+0

NSFormatterのサブクラスをiOSのカスタムフォーマッタクラス(NSF形式ではなくNSF形式のUITableViewCellsではNSFormattersを使用しない)だけで使用することに利点はありますか? – Cris

+0

(NSFormatterはインターフェイス以外のサブクラスに何も提供していないので、私はそれに直面しています)。 – Cris

+0

NSFormatterの主な利点はMac上です。私はMacが提供する特殊なNSFormatterサポートを持つiOSのものは認識していません。つまり、標準インターフェースを使用する理由はほとんどありません。それはうまく動作し、他のフォーマッタと自然にやりとりし、再利用の方がより良いものになります。 –

1

あなたはその意見の範囲にぶつかりそうです。

本質的に、それは純粋にプレゼンテーションなので、私はそれをViewレイヤーに入れます。コントロールロジックはありません。既存のデータを表示用にフォーマットすることはまったく問題です。

+0

+1完全一致。明らかに機能を表示しています。 – JeremyP

関連する問題