iphone – 基于视图的iOS应用程序模板

iphone – 基于视图的iOS应用程序模板,第1张

概述我已经阅读了Apple的“你的第一个iOS应用程序”指南,我所看到的一切似乎都很清晰.但是,当我试图理解XCode中提供的基于视图的iOS应用程序模板如何工作时,我遇到了一些有趣的难题. 我知道应用程序获取主要的nib文件名(通常是MainWindow.xib)形成* -Info.plist文件.我不明白的是,XCode如何知道哪个nib文件与默认情况下使用此基于View的应用程序模板创建的控制器 我已经阅读了Apple的“你的第一个iOS应用程序”指南,我所看到的一切似乎都很清晰.但是,当我试图理解XCode中提供的基于视图的iOS应用程序模板如何工作时,我遇到了一些有趣的难题.

我知道应用程序获取主要的nib文件名(通常是MainWindow.xib)形成* -Info.pList文件.我不明白的是,XCode如何知道哪个nib文件与默认情况下使用此基于VIEw的应用程序模板创建的控制器相关联.在本指南中,您将从基于Window的应用程序开始,并且“必须编写”类似于:

MyVIEwController *aVIEwController = [[MyVIEwController alloc]initWithNibname:@"MyVIEwController" bundle:[NSBundle mainBundle]];[self setMyVIEwController:aVIEwController];

这很有道理.然而,事实证明,在基于视图的iOS应用程序模板中没有这样的东西,并且首先实际上并不需要这个nib规范,只要您创建了带有选项“With XIB for user interface”的UIVIEwController子类“检查.我的问题是,XCode如何知道哪个nib与此控制器相关联,即它是将此连接存储在某些文件中,还是通过某种约定(控制器和nib文件的名称可能相同)?此外,’加载来自MyVIEwBasedAppController”副标题来自于MainWindow.xib中接口构建器的控制器视图?当我手动添加控制器时,它肯定不存在,所以我很好奇XCode在我背后做了什么魔术,当时我认为我只是选择一个简单的代码模板.

解决方法 如果查看目标信息(双击目标以显示它),“属性”选项卡将显示主Nib文件的名称. “Nib”和“Xib”这两个词可以互换用于这些目的; Xib只是Nib的新选择.

这将是’MainWindow’新鲜的模板.如果您打开MainWindow.xib,您会看到有一个名为'[project name] App Delegate’的对象,如果您显示检查器并在’i’选项卡下检查,您将看到类的类型在顶部命名.如果检查连接选项卡(右箭头),您将看到文件所有者(UIApplication本身)附加了“委托”属性.

你还会看到它有一个名为’vIEwController’的插座.这附加到xib中另一个名为“[project name] VIEw Controller”的对象.检查其上的类型,您将看到它是Xcode添加到项目中的视图控制器的类型.查看其属性(检查器中的第一个选项卡,使用滑块图形),您还将看到单独的nib文件被指定为包含其主要详细信息.

为了论证,假设我调用了我的项目’NibTest’而没有做任何更改.

在运行时,设备加载Info.pList.在那里它看到委托是NibTestAppDelegate类型.因此,它将实例化NibTestAppDelegate类的实例,并将UIApplication的委托属性设置为它.

然后,它将从MainWindow.nib看到NibTestAppDelegate有一个名为vIEwController的成员,类型为NibTestVIEwController.所以它将创建一个实例并在它刚刚创建的NibTestAppDelegate实例上设置vIEwController属性.

在这样做时,它将打开另一个xib并继续执行相同的步骤.

Objective-C具有完全反射的运行时,因此您可以在运行时通过其类名实例化对象.例如,这是Objective-C和C之间的差异之一.

Xcode不会生成任何隐藏代码或依赖任何隐藏的命名约定.整个过程由 *** 作系统在运行时计算出来.

编辑:例如,代替您的示例:

MyVIEwController *aVIEwController = [[MyVIEwController alloc]initWithNibname:@"MyVIEwController" bundle:[NSBundle mainBundle]];

你实际上可以这样做:

MyVIEwController *aVIEwController = [[NSClassFromString(@"MyVIEwController") alloc]initWithNibname:@"MyVIEwController" bundle:[NSBundle mainBundle]];

只要MyVIEwController存在于程序中或更广泛的运行时,它们就会以相同的方式运行.

您也可以将您喜欢的任何其他字符串对象传递给NSClassFromString.如果你愿意的话,甚至可以询问用户(尽管出于安全原因这是一个非常糟糕的主意).

总结

以上是内存溢出为你收集整理的iphone – 基于视图的iOS应用程序模板全部内容,希望文章能够帮你解决iphone – 基于视图的iOS应用程序模板所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存