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

标签 objective-c cocoa nib

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

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

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

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

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

最佳答案

这是从 iOS 开发人员的角度编写的(使用 View Controller )。我不确定 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 的外部对象,并将您的导出/操作连接到该对象。

关于objective-c - 如何将我的 nib 文件的所有者设置为另一个 nib 文件中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013352/

相关文章:

通过邮寄上传图片时 iOS AFNetworking 内部服务器错误 (500)

Objective-C 保存和加载文件

ios - 按钮标签在 XIB 支持的 View 中消失

c++ - 你怎么 "Drop down to Assembly"?

objective-c - UITableViewController 在网络请求完成之前执行延迟功能

objective-c - 我们需要在 Objective-C 的 block 中使用 weak self 吗?

cocoa - 如何像evernote一样实现NSToolbarItem动画

objective-c - 什么时候应该扩展 NSDocument,什么时候应该扩展 NSWindowController?

objective-c - 我说的对吗 initWithNibName :bundle is used to manually load nib files and that initWithCoder would be used as an alternative?