2011-03-17 72 views
5

我习惯从外面为我的对象提供依赖关系。界面生成器是一个工具,可以帮助做到这一点,但我不能让它适用于多个笔尖。只要我将主要的笔尖分解成更多的文件,我就不能再在不同的笔尖中的对象之间建立连接。使用文件所有者并没有什么帮助,因为它只允许我将一个单独的对象传递给一个笔尖。我可以使用Interface Builder在多个笔尖之间注入依赖性吗?

实施例:

enter image description here

这里A和B是一些较高级别的对象C和d某种较低级别的服务。只要所有的物体都在一个大笔尖内(第一张图片),一切都很好。但是,当我将笔尖拆分为A和B时,我无法将它们连接到C和D.(显然,我不想创建C和D的两个实例,我希望A和B都使用相同的C和D进行交谈没有使用单身)。

在接口构建器中可以这样做吗?怎么样?

回答

2

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

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

+0

他们不只是看法,我也有我的笔尖控制器和模型。这可能是因为Interface Builder并没有被设计用于这种方式(毕竟它是* Interface * Builder),但是挂钩整个对象图很容易,我无法抗拒。我唯一需要解决的问题就是拆分笔尖。 – zoul 2011-03-20 08:34:47

+0

你是对的,Interface Builder并没有被设计用于这种方式。你看过核心数据吗?保持你的nib文件严格适合你的观点,并为你的模型使用核心数据 - 你会更快乐。 – hooleyhoop 2011-03-20 09:47:49

+0

Core Data真的适合这里吗?请注意,我*不*创建一些使用IB的数据的OO数据库,我只是用它来建立我的对象之间的依赖关系。像'SettingsController'取决于'SettingsWindow'和'Settings'模型,'Settings'模型取决于一些用户的默认设置,等等。 – zoul 2011-03-20 10:13:08

0

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

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]; 

更多关于笔尖文件:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW24