如何将我的nib文件所有者设置为另一个nib文件中的对象?

时间:2011-05-16 05:01:36

标签: objective-c cocoa nib

我是Cocoa的新手,无法将我的nib文件拆分成多个nib文件。

我的MainMenu.nib包含Tracker Controller对象,该对象是NSObject的子类。它有一个出口到我的主菜单中的Show Tracker菜单项。

我的TrackerWindow.nib将文件所有者类设置为TrackerController,并且在该nib文件中有窗口和视图的出口。

我不确定如何让第二个笔尖的文件所有者成为第一个笔尖中实例化TrackerController的代理。 (我相信我需要第一个笔尖中的TrackerController实例,以便我可以使用IB来设置菜单项目插座。)

我做错了吗?如果是这样,我如何使用IB为多个nib文件中的同一对象设置出口?如果没有,我怎样才能让第二个笔尖的文件所有者指向我已在第一个笔尖中实例化的TrackerController

1 个答案:

答案 0 :(得分:2)

这是从iOS开发人员的角度编写的(使用视图控制器)。我不确定Mac OS X有何不同,但移植这些想法并不困难。


设置nib文件所有者的最简单方法是将其作为loadNibNamed:owner:options:的参数提供:

[[NSBundle mainBundle] loadNibNamed:@"Tracker" owner:trackerController options:optionsDict];

上面的代码段假定trackerController是UIViewController的一个实例。如果不是,请改用以下解决方案。


不使用initWithNibName:bundle:,而是按如下方式创建TrackerViewController(其中trackerController是对现有TrackerController对象的引用):

NSDictionary *proxyDict = [NSDictionary dictionaryWithObject:trackerController forKey:@"trackerController"];
NSDictionary *optionsDict = [NSDictionary dictionaryWithObject:proxyDict forKey:UINibExternalObjects];
TrackerViewController *trackerViewController = [[[TrackerViewController alloc] init] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"Tracker" owner:trackerViewController options:optionsDict];
// Display trackerViewController

在Tracker.nib中创建一个标识为trackerController的外部对象,并将您的出口/操作连接到此对象。