私が書いているココアアプリケーションでは、NSMutableDictionaryのいくつかの異なる種類の「サブクラス」を作成したいと考えています。 NSMutableDictionaryなどのクラスにメソッドを追加するための推奨される方法は、カテゴリを使用することです。objective-c:一意のサブクラスのように機能するNSMutableDictionaryの複数のカテゴリ?
しかし、これは私のために混乱する状況を作り出しています。
NSMutableDictionaryの各カテゴリで、参照している「サブクラス」に応じて、異なる処理を実行する「実行」メソッドを実装します。
...カテゴリ0で:、私は、例えば、以下のん「実行」メソッドを希望する各一
NSMutableDictionary+Category0
NSMutableDictionary+Category1
NSMutableDictionary+Category2
:たとえば、のは、私は、次の3つのカテゴリーを持っているとしましょうカテゴリ1では
-(void)run {
NSLog(@"I'm running in NSMutableDictionary+Category0");
}
...カテゴリ2では
-(void)run {
NSLog(@"I'm running in NSMutableDictionary+Category1");
}
...
これらのカテゴリを適用すると、カテゴリ0、カテゴリ1、カテゴリ2のオブジェクトがランダムに混在する「myObjects」というNSArrayを作成します。次に、私は次のことをしたい:
for (NSMutableDictionary* dict in myObjects) {
[dict run];
}
...そして呼び出されるカテゴリ固有の「実行」メソッドをそれぞれ持っている。
私が何か間違っていない限り、各カテゴリはNSMutableDictionaryに「実行」メソッドを追加しようとし、それらのうちの1つだけが呼び出されるため、これを正しく動作させることはできません。
私も可能なことをしようとしていますか?もしそうなら、誰かが適切な文書を私に指摘できますか?
ありがとうございます。
SeanとCalebに感謝します。あなたが概説した理由から、私はこれをすることができないだろうと思っていましたが、とにかく私がObjective Cやココアに関する知識を失ってしまった場合には、私に助けになると思いました。
私は、単一の「実行」メソッドを追加するカテゴリを作成します
...次のように私はこれを管理し、さまざまなアプリケーション固有の理由でNSMutableDictionaryであることを「親」クラスが必要ですNSMutableDictionaryに私は、独自の "run"メソッドを持つ新しい "MyRunnable"クラスのインスタンスを保持するために、その辞書の特別なキーを使用します。このMyRunnableクラスを私が望むさまざまな "実行"実装のサブクラス化し、適切なサブクラスをインスタンス化し、この特殊キーを使用してNSMutableDictionaryに配置します。 NSMutableDictionaryの "run"メソッドでは、特殊キーを使って "MyRunnable"のインスタンスを参照し、独自の "run"メソッドを呼び出します。
これは、トップレベルのクラスがまだNSMutableDictionaryであることを可能にする別の形式の包含です。
もう一度おねがいします。
を参照するために
id
を使用することができます>一箇所に一つのカテゴリを使用する方法と異なるものは、内の別の場所に、最初のを省略し、ありません同じプロジェクト<単一のクラスで単一のカテゴリを選択的に#importすると、同じ名前のメソッドを選択して選択することはできません。 – pkamb