0

これは説明するのが難しいです:私は持ってClassAいますMethodA、それはのいくつかのオブジェクトにいくつかのことをします、それがいくつかClassAのラベルを設定するとしましょう。

ClassBClassAは、サイドバービューであるのインスタンスも作成しました。ClassAのオブジェクトに対してMethodAと同じ処理を実行し、ClassAのインスタンス内のラベルを更新するには、ClassBが必要です。

MethodAを呼び出すにはClassBが必要ですが、ClassBのインスタンスを作成したClassAの特定のインスタンスに作用させる必要があります。

クラスは(少なくとも現在は)実際にはまだ何も共有していないため、相互に継承しません。ClassAのデータをClassBのラベルに入力しましたが、今度はその逆を行う必要があります。

[super MethodA]ClassBは継承しないため、ClassB内から呼び出すことはできません。私が必要としているのは[parent methodA]、このClassBオブジェクトを作成したクラスでそのメソッドを呼び出し、ClassAの特定のインスタンスに作用させる、に類似したものです。

そのようなものは存在しますか?申し訳ありませんが、投稿がごちゃごちゃしていて、このような漠然とした質問を何で検索すればよいかわかりません。

4

2 に答える 2

0

これは自分で作成する必要があります。一般的なパターンは、子クラスにリスナー割り当てを作成することです。「親」(より一般的には、通知を受け取りたいオブジェクト)は、リスナーを割り当てるために確立したメソッドを呼び出します。必要に応じて、お子様が複数のリスナーを維持できるようにすることも、単一のリスナーのみを維持できるようにすることもできます。リスナーは、データの受け渡しを計画する方法に適したプロトコルを実装する必要があります。

于 2012-12-03T17:20:45.337 に答える
0

いいえ、コンポジションを使用している場合は、クライアントクラスを含むクラスを参照するための外部の方法が必要です。

これを行う簡単な方法は、オブジェクトをインスタンス化するときに親を渡すことです。

@interface ClassB {
  ClassA *parent;
}

-(id)initWithA:(ClassA*)parent;

@property (readonly, retain) ClassA *parent;

@end


@implementation ClassB

-(id)initWithA:(ClassA*)parent {
  if ((self = [super init])) {
    self.parent = parent;
  }

  return self;
}

@end

あなたが持つことができるようにClassB

-(void)method {
  [parent updateThings:params];
}

この場合、両方のクラス宣言が相互参照さ@class ClassAれているため、コンパイルするにはヘッダーファイルに前方宣言(例)が必要になることに注意してください。

于 2012-12-03T17:21:35.623 に答える