在苹果文档中,它声明nsapplication是主笔尖的文件所有者。这只是由模板设置还是必须加载第一个笔尖,以这种方式加载?
另外,我阅读了关于文件所有者的其他帖子,但仍然让我感到困惑。如果Iboutlet是nibs文件所有者的属性,并且该对象在该nib中找到,那么IBoutlet是否只能指向对象?为什么笔尖甚至需要知道它的所有者的类除了对象?通过知道或不知道这个来启用或禁用什么?
还有一个,appdelegate在哪里适合这张照片?你甚至可以改变应用代表吗?
谢谢: - )
答案 0 :(得分:9)
Xcode的应用程序模板设置MainMenu.xib
作为其所有者加载NSApp
。这是由NSApplicationMain
函数完成的。 NSApplicationMain
在应用的NSMainNibFile
文件中查找Info.plist
键。如果找到该键,则使用相应的值作为要加载的nib文件的名称。 Xcode的应用模板将NSMainNibFile
设置为MainMenu
。
不一定要这样做。您可以更改或删除NSMainNibFile
中的Info.plist
条目。你甚至可以不使用NSApplicationMain
。相反,您可以自己初始化NSApp
(通过调用[NSApplication sharedApplication]
),然后以编程方式或通过加载笔尖创建用户界面,然后调用[NSApp run]
。
nib加载程序只能将插座连接到正在加载的nib中的对象,或者连接到File的Owner,First Responder或Application。插座本身不一定是文件所有者;它可以在笔尖中的任何对象上。
当您设置File的所有者类时,Interface Builder会扫描您的源代码以查找该类的声明。这就是它如何知道文件所有者应该拥有哪些出口和动作。
app委托通常是应用程序的顶级控制器。当发生各种应用程序级事件时会通知它。查看NSApplicationDelegate Protocol Reference。
在Xcode的app模板中,应用程序委托是MainMenu.xib
中的一个对象(你可以在nib中有非用户界面对象),它连接到文件所有者的delegate
插座。您可以根据需要修改类。您甚至可以完全从笔尖中删除对象。但任何认真的应用都需要一个应用代表。