Ios Xcode如何通过情节提要隐式设置rootViewController?
使用项目文件和Info.plist的Xcode定位main.storyboard并找到初始的ViewController。但我希望在AppDelegate中为ViewController看到一些锅炉板代码 AppDelegate看起来是空的:(未引用ViewController) 故事板是xml: 问题 Xcode使用什么magic代码引用情节提要xml并找到控制器 编译后,main()会调出AppDelegate,它应该直接引用ViewController,或者使用代理脚本对象访问ViewControllerIos 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
我错过了什么?一幅画抵得上千言万语。。但是,这里有一个简短的描述:“它在项目的settings/info.plist中” 在下面的图片中,“Main”是我最初的故事板的名称。此外,初始视图控制器在界面生成器中有一个标志,上面写着“Is initial view Controller”,告诉它您希望首先运行的是视图控制器 另外,点击图像会放大它们:)
一幅画抵得上千言万语。。但是,这里有一个简短的描述:“它在项目的settings/info.plist中” 在下面的图片中,“Main”是我最初的故事板的名称。此外,初始视图控制器在界面生成器中有一个标志,上面写着“Is initial view Controller”,告诉它您希望首先运行的是视图控制器 另外,点击图像会放大它们:) 我想我的书(你已经找到了)充分解释了这一点
main
调用UIApplicationMain()
并遵循某些规则。如果您在Info.plist中指定了一个主情节提要,并且您确实这样做了,那么:
将初始视图控制器实例(带有入口点箭头的实例)从情节提要中拉出。这是ViewController实例UIApplication
- 它还实例化UIApplication类
- 它还实例化应用程序委托类(在
调用中指定),并将其分配给UIApplication的UIApplicationMain
属性delegate
- 它创建一个窗口并将其分配给应用程序代理的
属性,然后将该视图控制器分配给窗口的窗口
属性根视图控制器
- 然后它显示窗口(并在应用程序代理上调用
)ApplicationIDFinishLaunching…
main
调用UIApplicationMain()
并遵循某些规则。如果您在Info.plist中指定了一个主情节提要,并且您确实这样做了,那么:
将初始视图控制器实例(带有入口点箭头的实例)从情节提要中拉出。这是ViewController实例UIApplication
- 它还实例化UIApplication类
- 它还实例化应用程序委托类(在
调用中指定),并将其分配给UIApplication的UIApplicationMain
属性delegate
- 它创建一个窗口并将其分配给应用程序代理的
属性,然后将该视图控制器分配给窗口的窗口
属性根视图控制器
- 然后它显示窗口(并在应用程序代理上调用
)ApplicationIDFinishLaunching…
这完全解释了启动过程。简单的回答是Objective-C的动态特性允许
UIApplicationMain()
仅从存储在应用程序的info.plist
文件和主NIB或主情节提要中的文本信息启动应用程序。编译器不需要生成样板代码
较长的答案是:
UIApplicationMain通过Objective-C运行时执行以下操作:
- 在所有情况下,
在plist中实例化UIApplicationMain()
键,通常是NSPrincipalClass
,但可以是自定义子类UIApplication
- 在旧式的无NIB应用程序中,
将实例化在UIApplicationMain()
中指定的AppDelegate类。它将AppDelegate连接到main.m
,然后交给AppDelegate以创建应用程序窗口、根视图控制器等UIApplication
- 在基于NIB的应用程序中,
不知道AppDelegate的名称。而是按照plist中的指定加载主NIB文件UIApplicationMain
。NIB负责实例化AppDelegate并连接到UIApplication,同时创建主窗口和根视图控制器NSMainNibFile
- 在故事板应用程序中,
实例化UIApplicationMain
和main.m中指定的应用程序委托,就像无NIB应用程序一样。然后加载主情节提要,它知道初始视图控制器是谁。它创建一个窗口,实例化初始视图控制器,并将其指定为该窗口的根视图控制器NSPrincipalClass
UIApplicationMain()
仅从存储在应用程序的info.plist
文件和主NIB或主情节提要中的文本信息引导应用程序。编译器不需要生成样板代码
较长的答案是:
UIApplicationMain通过Objective-C运行时执行以下操作:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
...
@end