2

我将 iOS 5 故事板用于视图控制层次结构。这样做的问题是我有一些共享控制器类来处理我需要注入到视图控制器的业务逻辑。这些控制器被初始化并保存在应用程序委托中。

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

如果我希望控制器松散耦合,我有什么选择?我听说过异议,我会对此进行调查,但非常欢迎任何意见

4

1 回答 1

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

于 2013-01-02T00:48:07.467 回答