可以检查nib是否已经加载?

时间:2011-02-05 23:24:08

标签: objective-c cocoa macos

在循环中,如果用户未输入他/她的设置,我将使用以下代码加载首选项窗口。

[NSBundle loadNibNamed:@"prefs" owner:self];

我的问题是,每次循环运行时,新窗口会一次又一次打开,直到有没有办法检查窗口或笔尖是否已经加载一次?

谢谢! :)

2 个答案:

答案 0 :(得分:4)

不要像你一样微管理nib加载,只需使用NSWindowController的子类来处理首选项窗口。 NSWindowController为您处理所有笔尖管理,您只需要调用-showWindow:来显示窗口。 NSWindowController唯一真正的诀窍就是确保你在笔尖本身中连接文件所有者的window出口。

要实例化该类,请使用‑initWithWindowNibName:传递nib的名称。

正如Ief2所提到的,您应该将此对象配置为单例。

答案 1 :(得分:1)

也许你可以创建一个名为PreferencesController的类,让该类在请求时加载nib,将窗口保存在ivar中。每次创建类的实例并激活它时,请检查窗口ivar是否为零。如果是,请加载笔尖,否则只需按下窗口键并按顺序排序。

除了存储窗口外,您还可以在用户关闭窗口时对其进行监控。当他或她这样做时,你可以释放你的伊娃并将其保持为零。现在当你再次请求它时,你会发现你没有窗口缓存,你将不得不重新加载笔尖。它可以节省内存。

也可以建议创建该类的共享实例。我不能包含样本,因为我在iPod touch上,但快速的Google搜索应该非常有用。

希望它有所帮助, ief2

编辑:下面的链接举例说明了单身人士:

http://eschatologist.net/blog/?p=178