Xcode如何通过故事板隐式设置rootViewController?
Xcode与项目文件和Info.plist找到main.storyboard并找到初始ViewController。但我希望能在AppDelegate中看到ViewController的一些锅炉板代码。Xcode如何通过故事板隐式设置rootViewController?
的AppDelegate看起来空白:(没有提到的ViewController)
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
...
@end
问题
不Xcode中什么魔法代码请参考故事板xml并找到控制器?
编译后,main()调出AppDelegate,它应该直接引用ViewController或者有一个代理Storyboard对象来访问ViewController。
我错过了什么?
我觉得我的书(你已经找到),充分说明了它。 main
调用UIApplicationMain()
并遵循一定的规则。如果你有一个主要情节串连图板在Info.plist中指定的 - 你做 - 那么:
UIApplication
拉初始视图控制器实例(其与入口点的箭头)出来的故事板。这是ViewController实例。它还实例化UIApplication类。
它还实例化应用程序委托类(在
UIApplicationMain
调用中指定),并将其分配给UIApplication的delegate
属性。它创建一个窗口并将其分配给应用程序代理的
window
属性,然后将该视图控制器分配给该窗口的rootViewController
属性。然后显示窗口(并在应用程序代理上调用
applicationDidFinishLaunching...
)。
这完全解释了启动过程。
你好亚光,你指的是哪本书。我很想了解这些点至少在很高的层次上如何连接。 这个解释真的很有帮助。我找到了关于某些类的所有解释,但没有太多关于Xcode如何在应用程序中隐式起作用。 –
http://www.apeth.com/iOSBook/ch06.html停止说Xcode。 Xcode不起作用。您可以使用Xcode进行编译和构建。你在运行时运行。运行时正在这样做。你知道吗,可可。你打电话给UIApplicationMain,这就是它的作用。我不明白为什么这很难。你现在被三个不同的人告诉了三次。 – matt
感谢您的纠正,Xcode只是建立。基于故事板的界面生成器起初看起来很神奇,UI由Xcode提供,所以它看起来像它的Xcode。 –
一张图片胜过千言万语。但是,这里有一个简短的描述:“它在你的项目的settings/info.plist中”。
在下图中“Main”是我最初的故事板的名称。此外,初始视图控制器在界面生成器中有一个标志,表示“是初始视图控制器”,告诉它它是您希望首先运行的视图控制器。
P.S.点击图片放大他们:)
嗨布兰登,这真的很有帮助,并在一定程度上回答了这个问题。 我想了解构建过程中的控制流程。 它看起来像Info.plist是应用程序的清单。我在哪里可以阅读关于xcode如何浏览应用程序架构以编译应用程序? –
XCode只是一个IDE/Build系统。铿锵是它用来编译你的应用程序的编译器。 – Brandon
发现此http://www.apeth.com/iOSBook/ch06.html解释更深一点。 (有帮助) –
简而言之,Objective-C的动态特性允许UIApplicationMain()
仅从存储在应用程序的info.plist
文件和主要NIB或主Storyboard中的文本信息引导您的应用程序。编译器不需要生成样板代码。
较长的答案:
UIApplicationMain通过Objective-C运行做以下的事情:
在所有情况下,
UIApplicationMain()
实例化NSPrincipalClass
关键在你的plist中,通常UIApplication
但可以一个自定义子类。在一个旧式的无NIB应用程序中,
UIApplicationMain()
将实例化在main.m
中指定的AppDelegate类。将接线的AppDelegate到UIApplication
,然后用手关闭的AppDelegate中创建该应用窗口中,根视图控制器等在基于NIB的应用程序,
UIApplicationMain
不知道的AppDelegate的名称。相反,它会载入您的主要NIB文件NSMainNibFile
,如plist中所述。 NIB负责实例化你的AppDelegate并连接到UIApplication,并创建你的主窗口和根视图控制器。在Storyboard应用程序中,
UIApplicationMain
实例化了main.m中指定的NSPrincipalClass
和应用程序委托,就像无NIB应用程序一样。然后加载主要故事板,它知道初始视图控制器是谁。它创建一个窗口,实例化初始视图控制器,并将其指定为窗口的根视图控制器。
对3代应用程序启动过程的很好的解释:) –
感谢您的回答,实际上我想知道AppDelegate如何了解它。 Xcode只是一个IDE。 –
我不认为我可以解释背后的过程,因为我也是一个初学者和学习,但也许这会触发一些方法,为初始视图创建方法。 @YugalJindle – dreamBegin
我认为这个问题增值,答案是惊人的。 –