Ios Xcode如何通过情节提要隐式设置rootViewController?

Ios Xcode如何通过情节提要隐式设置rootViewController?,ios,objective-c,xcode,Ios,Objective C,Xcode,使用项目文件和Info.plist的Xcode定位main.storyboard并找到初始的ViewController。但我希望在AppDelegate中为ViewController看到一些锅炉板代码 AppDelegate看起来是空的:(未引用ViewController) 故事板是xml: 问题 Xcode使用什么magic代码引用情节提要xml并找到控制器 编译后,main()会调出AppDelegate,它应该直接引用ViewController,或者使用代理脚本对象访问ViewC

使用项目文件Info.plist的Xcode定位main.storyboard并找到初始的ViewController。但我希望在AppDelegate中为ViewController看到一些锅炉板代码

AppDelegate看起来是空的:(未引用ViewController

故事板是xml:

问题

Xcode使用什么magic代码引用情节提要xml并找到控制器

编译后,main()会调出AppDelegate,它应该直接引用ViewController,或者使用代理脚本对象访问ViewController


我错过了什么?

一幅画抵得上千言万语。。但是,这里有一个简短的描述:“它在项目的settings/info.plist中”

在下面的图片中,“Main”是我最初的故事板的名称。此外,初始视图控制器在界面生成器中有一个标志,上面写着“Is initial view Controller”,告诉它您希望首先运行的是视图控制器

另外,点击图像会放大它们:)


一幅画抵得上千言万语。。但是,这里有一个简短的描述:“它在项目的settings/info.plist中”

在下面的图片中,“Main”是我最初的故事板的名称。此外,初始视图控制器在界面生成器中有一个标志,上面写着“Is initial view Controller”,告诉它您希望首先运行的是视图控制器

另外,点击图像会放大它们:)

我想我的书(你已经找到了)充分解释了这一点
main
调用
UIApplicationMain()
并遵循某些规则。如果您在Info.plist中指定了一个主情节提要,并且您确实这样做了,那么:

  • UIApplication
    将初始视图控制器实例(带有入口点箭头的实例)从情节提要中拉出。这是ViewController实例

  • 它还实例化UIApplication类

  • 它还实例化应用程序委托类(在
    UIApplicationMain
    调用中指定),并将其分配给UIApplication的
    delegate
    属性

  • 它创建一个窗口并将其分配给应用程序代理的
    窗口
    属性,然后将该视图控制器分配给窗口的
    根视图控制器
    属性

  • 然后它显示窗口(并在应用程序代理上调用
    ApplicationIDFinishLaunching…

这完全解释了启动过程。

我想我的书(你已经找到)对此进行了充分解释
main
调用
UIApplicationMain()
并遵循某些规则。如果您在Info.plist中指定了一个主情节提要,并且您确实这样做了,那么:

  • UIApplication
    将初始视图控制器实例(带有入口点箭头的实例)从情节提要中拉出。这是ViewController实例

  • 它还实例化UIApplication类

  • 它还实例化应用程序委托类(在
    UIApplicationMain
    调用中指定),并将其分配给UIApplication的
    delegate
    属性

  • 它创建一个窗口并将其分配给应用程序代理的
    窗口
    属性,然后将该视图控制器分配给窗口的
    根视图控制器
    属性

  • 然后它显示窗口(并在应用程序代理上调用
    ApplicationIDFinishLaunching…


这完全解释了启动过程。

简单的回答是Objective-C的动态特性允许
UIApplicationMain()
仅从存储在应用程序的
info.plist
文件和主NIB或主情节提要中的文本信息启动应用程序。编译器不需要生成样板代码

较长的答案是:

UIApplicationMain通过Objective-C运行时执行以下操作:

  • 在所有情况下,
    UIApplicationMain()
    在plist中实例化
    NSPrincipalClass
    键,通常是
    UIApplication
    ,但可以是自定义子类

  • 在旧式的无NIB应用程序中,
    UIApplicationMain()
    将实例化在
    main.m
    中指定的AppDelegate类。它将AppDelegate连接到
    UIApplication
    ,然后交给AppDelegate以创建应用程序窗口、根视图控制器等

  • 在基于NIB的应用程序中,
    UIApplicationMain
    不知道AppDelegate的名称。而是按照plist中的指定加载主NIB文件
    NSMainNibFile
    。NIB负责实例化AppDelegate并连接到UIApplication,同时创建主窗口和根视图控制器

  • 在故事板应用程序中,
    UIApplicationMain
    实例化
    NSPrincipalClass
    和main.m中指定的应用程序委托,就像无NIB应用程序一样。然后加载主情节提要,它知道初始视图控制器是谁。它创建一个窗口,实例化初始视图控制器,并将其指定为该窗口的根视图控制器


简单的回答是Objective-C的动态特性允许
UIApplicationMain()
仅从存储在应用程序的
info.plist
文件和主NIB或主情节提要中的文本信息引导应用程序。编译器不需要生成样板代码

较长的答案是:

UIApplicationMain通过Objective-C运行时执行以下操作:

    @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; } ... @end