agr*_*986 62 xcode objective-c ios
当我使用storyboard在Xcode 4.6中创建一个新的单视图应用程序时,我们可以看到main函数使用应用程序委托创建一个新的应用程序,如下所示:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
Run Code Online (Sandbox Code Playgroud)
但是,如果我们查看MyAppDelegate.h和MyAppDelegate.m,代码中没有任何地方引用MainStoryboard.storyboard.这与非故事板版本不同,我们可以找到以编程方式加载nib文件的代码行.
所以我的问题是,故事板是如何加载的?(我应该在哪里找到它?)
Chr*_*ner 74
查看项目的目标设置

请注意主故事板设置.
如果你想自己在代码中这样做,你会做类似的事情.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
UIViewController *vc = [storyboard instantiateInitialViewController];
// Set root view controller and make windows visible
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
看看UIApplicationMain的讨论:
讨论
此函数从主体类实例化应用程序对象,并实例化给定类的委托(如果有)并设置应用程序的委托.它还设置主事件循环,包括应用程序的运行循环,并开始处理事件.如果应用程序的Info.plist文件指定要加载的主nib文件,通过包含NSMainNibFile键和值的有效nib文件名,此函数将加载该nib文件.
当UIApplicationMain被调用,包含所有的应用程序信息plist文件中加载:

这就是它"理解"xib/storyboard文件需要加载的方式.
它是从info.plist文件中的UIMainStoryboardFile设置启动的.Xcode然后创建一个主窗口,实例化您的第一个视图控制器,并将其添加到窗口.您仍然可以使用类似于.nib的代码执行此操作
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController* initialView = [storyboard instantiateInitialViewController];
Run Code Online (Sandbox Code Playgroud)
在 Xcode 中,确定主故事板的人类可读的 Info.plist 部分是:
Main storyboard file base name
在纯文本中,关键是UIMainStoryboardFile:
<key>UIMainStoryboardFile</key>
<string>Main</string>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33262 次 |
| 最近记录: |