如何在XIB文件中定义对象以及如何在运行时创建它们?

时间:2009-09-21 10:22:23

标签: cocoa interface-builder bundle

我刚刚购买了一台Mac,并开始使用Cocoa和Objective-C开始探索软件开发,使用Snow Leaped中的XCode来自强大的Microsoft和C#backgrund

我读过的所有文档和教程都使用Interface Builder和XCode来创建带有用户界面的应用程序。我目前的理解是Interface Builder创建的对象以某种方式在.xib文件中定义并在运行时创建。

捆绑包含随附的代码和资源。是不是说.xib文件实际上是一个包含UI资源的包,并且在运行时和对象实例中加载了这个包(是正确的动词?)?

如果abive是真的,有什么方法可以看到Interface Builder生成的代码和创建这些对象的代码点,至少没有看到这一点我觉得有很多“魔法”发生在我学习的这个阶段,这对我没有帮助。

我是否应该阅读C#/ WinForms和Objective-C / Mac OS / Cocoa之间明显的范式转换?

2 个答案:

答案 0 :(得分:2)

要意识到的关键是在正常意义上没有任何代码......至少,nib / xib UI资源不仅仅是由Inteface Builder生成的Objective-c代码的简单控件。 这些是在笔尖中被“冻结”的对象,并且在应用程序需要时“解冻”(或者唤醒,我猜,就像awakeFromNib所建议的那样)。它们以xml / plist / etc形式存档,而不是用于生成objective-c源代码的框架。

考虑将它们序列化为xml或其他数据的对象。

答案 1 :(得分:2)

  

是不是说.xib文件实际上是一个包含UI资源的包,并且在运行时和对象实例中创建了这个包(是正确的动词?)?

没有。 A bundleseveral specific directory structures之一,xib文件是常规文件,而不是目录。

xib文件包含对象的描述。编译nib时(通常作为构建应用程序的一部分),nib编译器读入xib,按照其中的描述创建对象,并将它们存档到nib中,该nib也不是bundle。

当您在应用程序中加载nib时,nib加载器会取消对象的对象,并确保所有出口连接在它的对象之间以及文件所有者之间的IB中。

不要担心实施细节。 Nibs Just Work。您所要做的就是:

  1. 创建xib文件。如果您使用版本控制,则告诉它跟踪它们。
  2. 确保它们位于.lproj文件夹中(以便本地化程序可以创建它们的本地化版本。)
  3. 让Xcode处理其余部分。