0

そこで私は最近、List/Details アプリ パターンの機能を拡張することに取り組みました。詳細ビューでスワイプを実装して、親リストの前または次のアイテムに移動します。

私のソリューションでは、Details ビューに 1 つのプロパティを追加し、List ビューに 3 つのプロパティを追加し、それぞれにいくつかの新しい関数を実装し、両方の ViewDidLoad とテーブル ビューの DidSelect メソッドでコードが実行されるようにする必要があります。

Cocoa と XCode 4 で再利用できる明らかなメカニズム (スニペット、サブクラス化、およびカテゴリ) を調べて、このコード (ほぼスタンドアロン) を他の画面やアプリに簡単に追加できるようにしました。それに適しているようです。必要なすべての変更をカプセル化できるメカニズムや、他の画面やプロジェクトでのコードの再利用を簡素化できるメカニズムがわかりません。

具体的な短所は次のとおりです。

スニペット: 単一のコード ブロックしか挿入できないため、複数のファイルの変更や、同じファイル内の複数のポイントを変更する必要があるコードには適していません。

カテゴリ: 新しいメソッドを追加 (または既存のメソッドを再定義) できますが、新しいプロパティを追加することはできません。

サブクラス化: 新しいメソッドとプロパティを追加できますが、ソリューションを実装するために複数のクラスにわたる変更に対処しません。

ハイブリッド アプローチ (スニペット、カテゴリ、およびサブクラス化を使用) を使用できますが、そのようなコード変更をまとめてパッケージ化するメカニズムはありません。

他の言語や IDE からのものであっても、他の場所で使用されているアプローチを知ることは興味深いでしょう。

ありがとう

4

1 に答える 1

1

カテゴリは通常、関連する参照を介してプロパティを追加できます。これは、さまざまな問題に対する優れたソリューションです。


編集:いくつかのオブジェクトに特別な動作を持たせたいだけで、それらが作成されたときにそれらの作成を制御することがわかっている場合、それはサブクラス化のように聞こえます。特定のインスタンスに特別な動作を持たせたいが、それらの作成を制御しない場合、またはそれらが作成されたときに動作が必要かどうかわからない場合は、それを行うためのツールがあります。これはISAスウィズリングと呼ばれ、KVOの実装方法です。

iOS:PTLの第20章ではこれについてかなり説明していますが、その方法を示すサンプルコードが必要な場合は、ISASwizzleサンプルコードを参照してください。ロビーハンソンはまた、トピックの短い、アクセス可能な議論をしています。これはかなり高度な手法であり、慎重に使用する必要がありますが、非常に強力です。

于 2012-07-24T22:14:34.740 に答える