0

这个更难解释:我有ClassAwhich has MethodA,它对 中的一些对象做了一些事情ClassA,假设它设置了几个标签。

ClassA 还创建了一个 的实例ClassB,它是一个侧边栏视图。我需要 ClassB 对 ClassA 中的对象执行与 MethodA 相同的操作,更新 ClassA 实例中的那些标签。

我需要 ClassB 才能调用 MethodA,但让它作用于创建 ClassB 实例的 ClassA 的特定实例。

这些类(至少目前)不会相互继承,因为它们实际上还没有共享任何东西。我将 ClassA 中的一些数据填充到 ClassB 的标签中,现在我需要做相反的事情。

我不能[super MethodA]从 ClassB 中调用,因为它们不继承。我需要的是类似于 a 的东西[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 回答