iOS故事板和注入属性

时间:2012-05-01 09:31:17

标签: ios dependency-injection

我正在使用iOS 5故事板作为视图控件层次结构。这个问题是我有一些共享控制器类来处理我需要注入到视图控制器的业务逻辑。这些控制器已初始化并保存在app delegate中。

例如,我有一个控制器封装Dropbox交互,我在一些视图控制器中使用它。我可以使用每个prepareForSegue:sender:传递引用,但这会使整个视图控制器层次结构依赖于控制器。另外,我可以使用单身模式,但我并不是它的忠实粉丝。

如果我想让控制器松散耦合,我有什么选择?我听说过Objection,我会调查,但任何意见都会非常受欢迎

1 个答案:

答案 0 :(得分:0)

我知道这有点晚了但希望它可以帮助别人。

我使用协议解决了这个问题,并检查要注入的对象是否响应某些选择器。

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 ...”协议的方式。