我在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,它会进行循环导入,而且我无法编译代码。
有什么建议吗?
答案 0 :(得分:2)
您可以将所有协议添加到一个文件中,与viewControllers无关。示例Protocols.h / m并导入此文件没有问题。
答案 1 :(得分:2)
不可能从A到B和B到A两个代表。这是因为要创建一个委托,您需要导入另一个类,并将委托设置为另一个类。
我使用Singleton
解决了这个问题使用Singleton,您可以像往常一样将常规代理从外部类转换为主类(A)。将单例实现为静态接口,可以使用Main类(A)中的共享指针在Singleton中调用函数回调,并使用从singleton到B的委托。
使用此方法您将打破圆形标题问题。希望这会对你有所帮助。