在Objective C中使用双工(双向)委托

时间:2013-01-28 15:57:37

标签: ios delegates

我在Objective C中有2个类。

A类:ViewController B类:UITableViewController

在Storyboard中,我添加了一个B类对象,并使用A类的回调调用。我使用类A.h中的Delegate解决了这个问题:

#import "ClassB"

@interface ClassA : ViewController
< ClassBDelegate >
{ 
id<ClassADelegate> _delegateClassA;
}

在班级A.m:

@implementation ClassA

@synthesize delegateClassB = _delegateClassB;

@end

在班级B.h

@protocol ClassBDelegate

- (void)helloWorld

@end

@interface ClassB : UITableViewController
{
id<ClassBDelegate> _delegate;
@property (nonatomic, readwrite) id<ClassBDelegate> delegate;
}

在班级B.我可以正确使用代表:

[_delegate helloWorld];

问题是,我还想使用相反的方式,从A到B类的委托。我不能用同样的方法以另一种方式解决问题,因为如果我在B和A之间使用import,它会进行循环导入,而且我无法编译代码。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以将所有协议添加到一个文件中,与viewControllers无关。示例Protocols.h / m并导入此文件没有问题。

答案 1 :(得分:2)

不可能从A到B和B到A两个代表。这是因为要创建一个委托,您需要导入另一个类,并将委托设置为另一个类。

我使用Singleton

解决了这个问题

使用Singleton,您可以像往常一样将常规代理从外部类转换为主类(A)。将单例实现为静态接口,可以使用Main类(A)中的共享指针在Singleton中调用函数回调,并使用从singleton到B的委托。

使用此方法您将打破圆形标题问题。希望这会对你有所帮助。