代码之家  ›  专栏  ›  技术社区  ›  Crippledsmurf

在XIB文件中如何定义对象,以及如何在运行时创建这些对象?

  •  3
  • Crippledsmurf  · 技术社区  · 15 年前

    我刚购买了一台Mac,并开始探索使用Cocoa和Objective-C在Snow Leap中使用Xcode的软件开发,这是来自强大的微软和C Backgrund

    我读过的所有文档和教程都使用InterfaceBuilder和Xcode创建具有用户界面的应用程序。我目前的理解是,由接口生成器创建的对象以某种方式在.xib文件中定义,并在运行时创建。

    一个包包含代码和伴随它的资源。是否正确地说.xib文件实际上是一个包含UI资源的包,并且已加载该包(这是正确的动词?)是否在运行时创建对象实例?

    如果abive是真的,那么我是否可以看到由接口生成器生成的代码,以及在代码中创建这些对象的点,而至少没有看到一次这种情况,我觉得有很多“魔法”正在发生,在我学习的这个阶段,这对我没有帮助。

    我应该读些什么来理解C/Winforms和Objective-C/Mac OS/Cocoa之间明显的范式转换?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Peter Hosey    15 年前

    是否正确地说.xib文件实际上是一个包含UI资源的包,并且已加载该包(这是正确的动词?)是否在运行时创建对象实例?

    不。 A bundle 是其中之一 several specific directory structures ,xib文件是常规文件,而不是目录。

    XIB文件包含对象的描述。当您编译NIB(通常作为构建应用程序的一部分)时,NIB编译器读取XIB,按照其中的描述创建对象,并将它们归档到NIB中,而NIB也不是捆绑包。

    当您在应用程序中加载NIB时,NIB加载程序会解除对象的归档,并确保所有出口在其对象之间的IB中以及与文件所有者之间的连接。

    不要担心实现细节。笔尖就行了。你所要做的就是:

    1. 创建XIB文件。如果您使用版本控制,这些就是您告诉它跟踪的内容。
    2. 确保它们在.lproj文件夹中(以便本地化程序可以创建它们的本地化版本)。
    3. 让xcode处理其余的。
        2
  •  2
  •   phoebus    15 年前

    要认识到的关键是,在正常意义上没有任何代码……至少,NIB/XIB UI资源不仅仅是由Intelface Builder生成的Objective-C代码的控制。 这些对象在NIB中有点“冻结”,在应用程序需要的时候有点“解冻”(或者,我猜,如awakefromnib所建议的那样,被唤醒)。它们以XML/plist/etc格式存档,而不是作为生成Objective-C源代码的框架。

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