このフォーマットが1か所でのみ使用される場合、最適な解決策はフォーマットに書式を付けることです。このアプローチはしばしば非常にうまく機能します。ただし、カスタム表示がない場合は、この作業をView Controllerに組み込むのが自然です。 CocoaのMVCのバージョンでは、View Controllerはビューをどのように管理するかに柔軟に対応できます。 (これは、CocoaのMVCとSmallTalkのMVCが異なる点です)
しかし、ビュー(またはビューコントローラ)間で同じ書式を共有する場合はどうなりますか?その後、フォーマットコードをNSFormatter
サブクラスに分解します(または、あなたのケースでは既存のNSDateFormatter
を使用します)。これらを渡したり、イヤーズに入れたり、シングルトンを作成してそれらを保持することさえできます。
この場合、モデルに入れるのはなぜですか?まあ、このように時間を示す4つのビューがあるとしますが、時間を00:00.0として表示する2つのビューを追加し、時間と分を表示する1つのアキュムレータビューがあります。これらのケースを処理するためにモデルを拡張し続ける必要があります。このモデルでは、ビューに関する情報がますます多く集められています。フォーマッタで書式設定を保持すると、これらの詳細をモデルに汚染させることなく、コード(およびバグ修正)を共有することができます。非常に特殊な書式設定が必要なビューでも、独自のカスタムコードを使用できます。
フォーマットの種類ごとに別々のNSFormatter
サブクラスを作成する必要はありません。 MYObjectFormatter
クラスを作成して、「時間」、「分」、「秒」などのオプションを使用できます。この点についてはNSDateFormatter
のように動作し、必要な使いやすさを与えながら書式設定コードを保持しますモデルの外に出る。これはちょうどNSDate
とNSDateFormatter
がどのように分割されているかです。
NSFormatterのサブクラスをiOSのカスタムフォーマッタクラス(NSF形式ではなくNSF形式のUITableViewCellsではNSFormattersを使用しない)だけで使用することに利点はありますか? – Cris
(NSFormatterはインターフェイス以外のサブクラスに何も提供していないので、私はそれに直面しています)。 – Cris
NSFormatterの主な利点はMac上です。私はMacが提供する特殊なNSFormatterサポートを持つiOSのものは認識していません。つまり、標準インターフェースを使用する理由はほとんどありません。それはうまく動作し、他のフォーマッタと自然にやりとりし、再利用の方がより良いものになります。 –