Cocoa 我可以使用Interface Builder跨多个NIB注入依赖项吗?

Cocoa 我可以使用Interface Builder跨多个NIB注入依赖项吗?,cocoa,dependency-injection,interface-builder,Cocoa,Dependency Injection,Interface Builder,我习惯于从外部为我的对象提供依赖关系。Interface Builder是一个帮助实现这一点的工具,但我无法让它与多个NIB一起工作。一旦我将主nib分解成更多文件,我就不能再在不同nib中的对象之间建立连接。使用文件所有者并没有多大帮助,因为它只允许我将一个对象传递到nib中 例如: 这里A和B是一些高级对象,C和D是一些低级服务。只要所有对象都在一个大笔尖内(第一张图片),一切都很好。但是,当我拆分nib以分离A和B时,我很难将它们连接到C和D(显然,我不想创建C和D的两个实例,我希望A和

我习惯于从外部为我的对象提供依赖关系。Interface Builder是一个帮助实现这一点的工具,但我无法让它与多个NIB一起工作。一旦我将主nib分解成更多文件,我就不能再在不同nib中的对象之间建立连接。使用文件所有者并没有多大帮助,因为它只允许我将一个对象传递到nib中

例如:

这里A和B是一些高级对象,C和D是一些低级服务。只要所有对象都在一个大笔尖内(第一张图片),一切都很好。但是,当我拆分nib以分离A和B时,我很难将它们连接到C和D(显然,我不想创建C和D的两个实例,我希望A和B在不使用单例的情况下与同一个C和D对话)


可以在Interface Builder中执行此操作吗?如何?

您的.nib中的对象与视图层相对应,对吗?未归档时,它们归您选择的控制器所有,该控制器在您的服务和视图之间进行调解


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

您应该使用外部对象。在xib中添加外部对象。您可以在对象库中找到它。将其用作普通对象(插座等)。因为有一个外部对象,它不会通过非归档过程创建,所以您应该自己创建。然后以编程方式加载nib:

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文件的更多信息:

它们不仅仅是视图,我的nib中还有控制器和模型。可能是Interface Builder的设计不是为了这样使用(毕竟它是Interface Builder),但是挂钩整个对象图太容易了,我无法抗拒。对我来说唯一剩下的问题是分裂笔尖。你是对的,Interface Builder不是设计成这样使用的。你看过核心数据了吗?将nib文件严格保存在视图中,并为模型使用核心数据-您会更高兴。核心数据真的适合这里吗?请注意,我并不是使用IB创建带有数据的OO数据库,我只是使用它来建立对象之间的依赖关系。像
SettingsController
取决于
SettingsWindow
Settings
模型,
Settings
模型取决于一些用户默认值,等等。核心数据可能与此无关,但请注意,CD与OO数据库或ORM没有任何关系(可以,很少)。它只是让您直观地连接模型图,提供持久性、撤消/重做,并使数据连接到视图变得容易。回到你的观点——在简单的情况下,尝试将你的整个应用程序结构归档在nib中似乎是一个好主意,但正如你所发现的,在其他情况下,这将是一个更大的障碍而不是帮助。保留笔尖仅用于查看。