如何在Objective-C中实现多级委托

时间:2012-08-15 12:14:42

标签: iphone objective-c ios ios5

我有4个班级(观点):
A,B,C和D

A类呼叫B,B呼叫C,C呼叫D:
A> B> C> d

在D类中,我实现了一个委托协议,我想在A类中捕获委托事件。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:10)

有多种方法可以实现这一目标。在你的情况下最好的取决于情况。以下是一些想法:

  1. 您可以在所有这些类中实现委托协议,只需将其传递给该行。
  2. 您可以添加一个ivar从A访问D类并直接传递(spaghetti code的危险!)
  3. 如果有可能你可以改变你的实现,那么你只能在A中实现委托并在那里处理它。
  4. 最后的手段可能是使用NSNotifications(不要与Mountain Lion中的NSUserNotifications混淆)。在A类中,您向默认通知中心发布通知,在D类中注册此通知并根据需要进行处理。只有在没有其他工作的情况下才使用这种方法,因为这会导致更糟糕的代码。

答案 1 :(得分:0)

将ClassD成员委托指定为ClassA对象。

让我解释一下

如果在ClassD中有UITableView并想在ClassA中触发ClassD tableView Delegates,请将tableView委托指定为ClassA对象,并在ClassA中实现所有UITableView委托。

例如:ClassD_tableView.delegate = classAObj;

注意:在A类中实现ClassD tableView委托方法,不要在ClassD中创建ClassA的新对象。您可以通过传递参数或使用UIResponder来获取ClassD中的父类A.