Cocoa 多次同时加载 nib 模板

Posted

技术标签:

【中文标题】Cocoa 多次同时加载 nib 模板【英文标题】:Cocoa Loading a nib template multiple times, simultaneously 【发布时间】:2011-08-01 18:48:24 【问题描述】:

我有两个 nib 文件,一个在启动时打开,另一个在用户单击按钮时加载。第一个工作正常,第二个第一次工作。问题是我想在按下按钮时分别加载第二个 nib 文件几次。目前我正在使用这个:

- (IBAction)startAction:(id)sender 

NSNib *nib = [[NSNib alloc] initWithNibNamed:@"SecondView" bundle:nil];

[nib instantiateNibWithOwner:self topLevelObjects:nil];

但这重新加载已经显示的笔尖,我想单独加载一个新视图。它们每个都显示一些用户输入,这些用户输入对于加载的每个视图都是不同的,所以我想它必须被制成单独的对象,这样它们就不会相互干扰。我可以告诉 nib 正在加载,因为显示了一个计时器,并且每次按下 enter 时计时器计数更快,这意味着它们在同一个视图上同时运行,我希望它们在不同的视图上同时运行。我在文档中找到了我正在使用的代码,但它下面写着:

// At this point, our outlets to inside this nib will be properly setup. It is important to note
// that they will get overwritten when this is called again!

所以我不确定是否可以使用此代码完成我想要的,或者我是否应该使用完全不同的东西。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

加载 nib 文件后,NSNib 对象使用包的资源映射来定位 nib 引用的其他资源。如果您为 bundle 参数指定了nil,则NSNib 对象会在与 nib 文件所有者的类关联的 bundle 中查找这些资源。您应该使用不同的所有者对象来实例化您的 nib。

【讨论】:

每个单独的视图是否应该有不同的所有者对象? 另外,我真的不知道该怎么做。我应该使用什么捆绑包?我需要将视图加载大约 9 次,每个对象都是一个对象吗?我不知道如何以编程方式创建或分配新对象。

以上是关于Cocoa 多次同时加载 nib 模板的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa:使用 nib 加载 NSViewController

从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib

从情节提要加载的 nib 的 Cocoa replaceSubview

Cocoa 加载 ViewNib

Cocoa - 从 nib 加载视图并将其显示在 NSView 容器中,作为子视图

Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib