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 之间是什么关系? 的相关文章

  • 如何知道用户何时更改设置包

    我让用户在 iPhone 的设置区域中更改他们的设置 在下一次网络同步期间 我想将用户更改发送到服务器 但前提是做出改变 但是我如何知道用户何时在设置区域中进行了更改 如果可以的话 我想避免选择总是发送信息 无论是否更改 或者首先从服务器获
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 如何在 Core Data 中存储图像?

    只是猜测 我创建一个属性并将其类型设置为 二进制 但最终我该如何使用它呢 我猜幕后有一个 NSData 那么该属性实际上采用 NSData 吗 这个问题已经被问过很多次了 答案有点复杂 当涉及二进制数据时 您应该根据要使用的数据的预期大小来
  • 使用 iPhone 中的地图视图读取当前位置名称

    我读取了当前位置的纬度和经度值 然后成功将该位置固定在 iPhone 中 现在我想使用这个纬度和经度值读取该地名 我使用以下代码来读取查找当前位置 void mapView MKMapView mapView1 didUpdateUserL
  • 如何将 NSDecimal 值转换为 NSInteger 值?

    我遇到一种情况 我得到一个 NSDecimal 并且我需要一个 NSInteger 我确实知道这是一个非常小的值 这是绝对肯定的 它不会大于 100 所以将它转换为 NSInteger 就完全没问题 不会发生溢出 这怎么可能做到呢 NSDe
  • 如何在 iOS 9 上可靠地检测是否连接了外部键盘?

    在 iOS 9 之前 确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并使文本字段成为第一响应者 如中所述这个问题 https stackoverflow com questions 289
  • 持久化 UINavigationItem 的 rightBarButtonItem 属性

    这可能是一个愚蠢的问题 但是有可能保持正确的吗 UIBarButtonItem跨由一个管理的多个视图UINavigationController 我的一系列观点通常具有相同的权利UIBarButtonItem 但是当我将新视图推送到我的UI
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • 加载新控制器时,iPhone 横向模式切换到纵向模式

    我的应用程序在横向模式下正确启动并且运行良好 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation if interf
  • 如何在 iOS 8 中关闭两个 UIViewController?

    我正在使用 Objective C 开发 iPhone 应用程序 由于我需要一次关闭两个 UIViewController 所以我使用下面的代码 self presentingViewController presentingViewCon
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • 在 Objective-C 中的 Swift 类上调用 NSStringFromClass 返回模块损坏的名称

    我知道这个问题 https stackoverflow com questions 24107658 get a user readable version of the class name in swift in objc nsstri
  • 无法将项目添加到 NSMutableArray ivar

    我的目标是将字符串添加到数组中 并在我调用的方法中执行此操作 在这个方法中 我在数组中得到一个空值 但不知道为什么 我在课程开始时有这样的内容 NSMutableArray listOfEvents 以及我在每个事件上调用的方法 void
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 如何确保 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 被