AppDelegate、RootViewController 和 UIApplication 之间是什么关系?

2024-01-30

我试图找出 appdelegate、RootViewControoler 和 UIApplication 之间的关系。到目前为止,这是我已经弄清楚的:

当启动你的应用程序时,main.m 被加载。

从这里,您的 MainWindow.xib 被加载。

在 MainWindow.xib 中,文件所有者的类型为 UIApplication。

您将 UIApplication 的委托设置为 AppDelegate。

在 AppDelegate 的源代码中,您可以将 RootViewController 设置为显示的第一个视图。

这是正确的吗?是什么提示 AppDelegate 最初运行它的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }

method?


当 Objective-C 应用程序启动时,它通过运行名为 main() 的函数来启动。它不必位于“main.m”文件中,但这就是 Xcode 向导进行设置的方式。

在向导生成的 main() 函数中,有这样一行:

int retVal = UIApplicationMain(argc, argv, nil, nil);

这就是构成整个应用程序的“UIKit”框架的启动。在 UIApplicationMain 内部,创建了一个 UIApplication 类型的对象。当应用程序启动时,UIApplication 执行的部分操作是调用 UIApplication 类的委托成员上的 applicationDidFinishLaunchingWithOptions 方法。该委托在 MainWindow.xib 文件中设置为 ProjectAppDelegate 类的实例,该类是符合 UIApplicationDelegate 协议的 NSObject 的子类。

是什么促使 AppDelegate 最初 运行它是...

因为在 MainWindow.xib 文件中,您已将文件所有者(即 UIApplication 对象)的“委托”出口连接到 .xib 文件中的 UIApplicationDelegate 对象(实际上是项目向导完成了连接),并且该类UIApplicationDelegate 的设置为应用程序的 UIApplicationDelegate 子类。

“MainWindow.xib”并没有什么神奇之处,它可以被称为“Foo.xib”,重要的是 Info.plist 文件中名为“Main nib file base name”的属性是“MainWindow”。尝试将 MainWindow.xib 重命名为 Foo.xib 并将 Info.plist 中的“Main nib 文件基本名称”更改为“Foo”,您会发现它仍然有效。

编辑:有关 RootController 的更多信息

再说一次,所谓的“RootController”并没有什么神奇之处。这只是 Xcode 新建项目向导为您创建的 UIViewController 子类的名称。

该向导将代码放置在两个类的项目中:Project AppDelegate 和Project ViewController。 Project AppDelegate 类包含两个出口成员:

IBOutlet UIWindow *window;
IBOutlet ProjectViewController *viewController;

在 MainWindow.xib 文件中,放置了 UIWindow 和 ProjectViewController 的实例,并将其连接到 ProjectAppDelegate 中的上述出口。

使您的内容显示在屏幕上的是 Project AppDelegate 类中的以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

同样,这并没有什么神奇之处:项目向导创建的代码将“根”ViewController 的视图添加到窗口的视图中,并使窗口可见。您的“根”视图控制器是在 .xib 文件中创建的,并连接到 ProjectAppDelegate 出口。

尝试完全自己创建一个应用程序而不使用向导中的任何文件是非常有启发性的。您将学到很多有关 .xib 文件如何工作以及它们与代码对象如何关联的知识。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AppDelegate、RootViewController 和 UIApplication 之间是什么关系? 的相关文章

  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • 如何编辑应用程序包中的文件?

    在我的应用程序中 我从存储在捆绑资源中的 CSV 文件加载数据 但是 我希望能够在用户点击 更新 按钮时以编程方式更新此文件 有没有办法以编程方式更改应用程序包中的资源 这是我用来访问该文件的代码 NSString path NSBundl
  • MKMapView 拦截/劫持 iPhone 触摸事件

    3 0 SDK 是否存在禁用实时缩放并拦截 MKMapView 放大手势的 bug 我有一些真正简单的代码 因此我可以检测点击事件 但有两个问题 放大手势始终被解释为缩小手势 所有缩放手势都不会实时更新地图视图 在 hitTest 中 如果
  • 如何为 Nslocal 通知设置自定义重复间隔......?

    我是 iphone 开发新手 我正在尝试在我的项目中使用 NslocalNotification 我需要每 2 小时或每两天或每两个月等给出提醒 目前我正在使用 NslocalNotification 重复间隔 但它仅适用于使用 Ncale
  • 从plist文件中读取数据

    我正在尝试为我的 iPhone 应用程序实现保存状态 我有一个名为 SaveData plist 的 plist 文件 我可以通过以下方式读取它 NSString pListPath2 bundle pathForResource Save
  • iPhone Twitter SDK 与 iOS 5 设备的集成问题

    我已成功将 Twitter Sharekit 与我的 iPad 应用程序源集成 当我在模拟器和装有 iOS 4 X 的 iPad 1 上测试该应用程序时 它运行完美 并且成功发布了推文 但是 如果我在装有 iOS 5 的 iPad 2 上安
  • 在成为FirstResponder或resignFirstResponder的情况下将对象保持在键盘顶部?

    我目前在键盘顶部有一个 UITextField 当您点击它时 它应该粘在键盘顶部并平滑地向上移动 我不知道键盘的具体时长和动画类型 所以确实很坎坷 这是我所拥有的 theTextView resignFirstResponder UIVie
  • 如何清除代码中的 NSLog 输出?

    有没有办法清除代码中的控制台输出 thanks 我喜欢的快捷方式 Simply USE K Keyboard Shortcut when you want to clear the NSLOG Data
  • 重新启动应用程序时出现异常 SIGKILL

    我在 iPhone 模拟器中构建并运行一个项目 我通过按主页按钮将其发送到后台 然后我双击主页按钮在后台找到我的应用程序并点击它 它变得活跃并且应用程序继续运行 在这里 无论我重复多少次 我都没有问题 然后我通过点击应用程序图标上的红色小减
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 在 Xcode5 中使用 XCTest 时 AFNetworking 导致错误

    我正在使用 Xcode 5 现在刚刚开始对现有项目进行单元测试 为此我添加了CocoaTouch Unit Testing Bundle作为我的项目的目标 目标名称是 MyAppTests 我之前使用添加了 AFNetworking 库Co
  • HTML 分页

    有没有html分页的开源项目 我正在为 iPhone 开发一个应用程序 我想在 UIWebView 上显示 HTML 文件 并且不希望用户向下滚动以查看屏幕上未显示的剩余内容 我想在第二个 UIWebView 上显示剩余的内容 我怎样才能做
  • iPhone JPG 图像有非标准魔术字节 ff d8 ff e1?

    我的网络应用程序在接受上传的图像之前会根据文件扩展名检查前四个字节 一位同事向我展示了他 iPhone 上的图像 但这些图像被拒绝了 它们具有不同的第四个字节 e1 225 而不是预期的 e0 224 这对于 iPhone 来说是常见的吗
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • 如何为 NSAttributedString 内的文本设置“隐藏”属性?

    我有一个 Cocoa 应用程序NSTextView控件将其文本保存在NSAttributedString 实际上我相信这是一个NSMutableAttributedString 我可以轻松地在该字符串内的不同字符范围上设置和修改不同的文本属
  • Facebook iPhone SDK:上传图像时显示进度条

    我想在我的 iPhone 应用程序将图像上传到 Facebook 时显示进度条 是否可以 我可以对我发出的每个 FBRequest 执行此操作吗 我还使用 FBRequest 来检查扩展权限 有时需要花费很多时间 谢谢 对于进度条 您可以做
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行

随机推荐

  • 如何确保 yum install 在 shell 脚本中成功?

    我有一个 shell 脚本 它检查是否有互联网连接 通过 ping google 然后调用 yum install packageA packageB assumeyes 我如何确认软件包已安装 或已经安装 我是否再次进行 yum 调用并解
  • WebAPI 2.2 OData v4 [EnableQuery] 适用于何处?

    截至 2015 年 1 月 应用 EnableQueryAttribute 的正确 错误在哪里 该文档链接如下 http www asp net web api overview odata support in aspnet web ap
  • 运动模拟游戏的动态如何运作?

    我想制作一款棒球模拟游戏 这些体育管理游戏是靠运气吗 完全靠运气的管理游戏并不公平 但也不能太可预测 这些游戏背后的逻辑是如何运作的 这都是关于概率和统计的 您根据指定的某些属性设置某事发生的机会 然后在游戏过程中加入随机因素 使事情变得更
  • 是否可以运行不在文件中的node.js脚本?

    我需要使用 C 应用程序中的 node js 运行 javascript 代码 但我不想之前将代码保存到文件中 是否可以直接将代码转发到node exe 而不将其临时保存到文件中 是的 您可以使用 eval 标志来运行代码 node eva
  • Flutter如何画半圆(半圆)

    怎样才能画出这样的半圆呢 Code class DrawHalfCircleClipper extends CustomClipper
  • evt.preventDefault(); 的反义词是什么

    一旦我解雇了evt preventDefault 如何再次恢复默认操作 根据 Prescott 的评论 相反 evt preventDefault 可能 本质上等于 默认 因为我们不再阻止它 否则 我倾向于向您指出其他评论和答案提供的答案
  • Eclipse 显示奇怪的 [DEBUG],我想禁用它

    根据下面的代码 我将程序的每一个细节都作为调试来获取 我想将其删除 运行应用程序时是否花费太多时间 我怎样才能禁用那些 DEBUG 2012 01 24 18 47 25 305 ERROR SqliteDatabaseType WARNI
  • 如何制作 tiff z-stack 保存或添加元数据?

    我有许多 tiff 文件 我想使用 python 将它们合并到 z 堆栈中 各个文件都有我想保存的元数据 OME https www openmicroscopy org site support ome model ome tiff 在我
  • 如何将查询参数重写为 Apache 中的路径参数?

    我目前有一个网站 正在尝试在搜索引擎优化方面进行优化 我的网站使用以下 URL 域名 com app about 在我的应用程序中 GET app 正如预期的那样 设置为 关于 现在 我想让这样的 URLdomain com about被视
  • Raven 查询返回集合包含的 0 个结果

    我有一个基本架构 Post Labels Text Mine Text Incomplete 我正在查询 raven 询问所有带有 我的 和 不完整 标签的帖子 queryable Where candidate gt candidate
  • 从现有的 OutputStream 创建 Java-Zip-Archive

    如果我不想将生成的存档写入磁盘而是将其发送到其他地方 是否可以在 Java 中创建 Zip 存档 这个想法是 当您想通过 HTTP 例如 从数据库 Blob 或任何其他数据存储 将 Zip 存档发送给用户时 在磁盘上创建文件可能是一种浪费
  • Matplotlib:如何更改双条形图的图大小

    我使用以下代码在 matplotlib 中绘制了双条形图 x pd Series range 12 y self cust data Cluster ID value counts sort index z self cust data C
  • jsf动态改变托管bean

    如何动态更改托管 bean 的 value 属性 例如 我有 h inputText 并且根据输入的文本 托管 bean 必须是 studentBean login 或 lecturerBean login 简化形式
  • Ghost脚本不可写

    尝试在新 Macbook 上安装 Octave 但使用 Homebrew 时不断遇到问题 我在这里遵循指示 http wiki octave org Octave for MacOS X http wiki octave org Octav
  • TCPDF pdf 中的特定字体

    有人可以告诉我我做错了什么吗 我需要在 TCPDF 生成的 pdf 中使用 Arial 字体 首先我尝试使用它 1 我从Windows字体目录中获取Arial并将其放入TCPDF目录中 2 接下来我在脚本中写道 fontname pdf g
  • Django ORM:分组依据和最大值

    我有一个看起来像这样的模型 Requests user req time req text 在数据库中 记录可以如下所示 id user id req time req text 1 1 TIMESTAMP YES 2 1 TIMESTAM
  • 仅在 Apple Watch 上请求位置,无需在配对手机上请求位置代码

    我到处都看过 包括苹果的示例应用程序 https developer apple com library content samplecode PotLoc Listings Potloc WatchKit Extension Stream
  • ZeroMQ性能测试。准确的延迟是多少?

    我正在使用 zmq 跨进程传输消息 并且我想做一些性能测试来获取延迟和吞吐量 官方网站给出了指南讲述如何运行性能测试 http zeromq org results perf howto 例如 我尝试过 local lat tcp 1521
  • macOS 10.15 Catalina 安装中缺少 PHP 7.3.8 zip 扩展名 [重复]

    这个问题在这里已经有答案了 MacOS 10 15 Catalina 安装的 PHP7 3 8 版本不包含 PHP 扩展 zip 我该如何查找并安装该 zip 扩展名 Brew install php73 zip 报告没有具有该名称的可用公
  • AppDelegate、RootViewController 和 UIApplication 之间是什么关系?

    我试图找出 appdelegate RootViewControoler 和 UIApplication 之间的关系 到目前为止 这是我已经弄清楚的 当启动你的应用程序时 main m 被加载 从这里 您的 MainWindow xib 被