我知道这有点晚了,但希望它可以帮助其他人。
我使用协议解决了这个问题,并检查要注入的对象是否响应某些选择器。
在该prepareForSegue
方法中,我做以下两件事之一:
id object = segue.destinationController;
if([object conformsToProtocol:@protocol(HasApplicationManager) ]){
[(id<HasApplicationManager>)object setApplicationManager:_applicationManager];
}
if([object respondsToSelector:@selector(setViewDelegate:)]){
[object performSelector:@selector(setViewDelegate:)withObject:self];
}
第一个位检查目标控制器是否符合指定的协议,这仍然是松散耦合的,因为您使用组合模式构建应用程序。
其次,我检查了一个选择器,这比协议更非正式,并且可能更耦合并带来更多问题。但这是一种绕过数百个“IHave...”协议的方法。