我可以使用Interface Builder在多个笔尖之间注入依赖关系吗?

时间:2011-03-17 14:01:03

标签: cocoa dependency-injection interface-builder

我习惯从外面为我的对象提供依赖项。 Interface Builder是一个帮助实现此目的的工具,但我无法使用多个笔尖。一旦我将主笔尖分成更多文件,我就不能再在不同笔尖中的对象之间建立连接。使用文件所有者并没有多大帮助,因为它只允许我将一个对象传递给一个笔尖。

示例:

enter image description here

这里A和B是一些更高级别的对象,C和D是某种更低级别的服务。只要所有物体都在一个大笔尖内(第一张图片),一切都很好。但是当我将笔尖分开分开A和B时,我很难将它们连接到C和D.(显然我不想创建C和D的两个实例,我希望A和B都能说同一个C和D不使用单身人士。)

是否可以在Interface Builder中执行此操作?怎么样?

2 个答案:

答案 0 :(得分:2)

.nib中的对象对应于您的视图层,对吗?取消归档时,它们由您选择的控制器拥有,该控制器在您的服务和您的视图之间进行调解。

在.nib文件中存档任何类型的低级服务或任何类型的依赖都是非常规的。

答案 1 :(得分:1)

您应该使用外部对象。在你的xib中添加外部对象。您可以在对象库中找到它。将它用作普通物体(插座等)。由于有一个外部对象,它不会通过unarchiving过程创建,你应该自己创建。然后以编程方式加载您的笔尖:

NSArray*    topLevelObjs = nil;
NSDictionary*    proxies = [NSDictionary dictionaryWithObject:self forKey:@"AppDelegate"];
NSDictionary*    options = [NSDictionary dictionaryWithObject:proxies forKey:UINibExternalObjects];
topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"Main" owner:self options:options];

有关nib文件的更多信息:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW24