Bla*_*ard 7 objective-c uiwindow ios appdelegate
当您使用单一视图模板启动应用程序,并NSLog(@"self.window = %@", self.window);在AppDelegate.m application: didFinishLaunchingWithOptions:方法的第一行添加时,您可以看到self.window应用程序中存在该应用程序.
但是,当您使用空模板启动应用程序并尝试将其记录self.window到控制台时,结果将返回null.即使您添加了故事板和视图控制器,并将其视图控制器设置为初始视图控制器,并尝试记录self.window,结果也是相同的 - 其值设置为null.
请注意,无论采用哪种方式,您都可以@property (strong, nonatomic) UIWindow *window;在AppDelegate.h中默认声明.所以我想知道为什么在第一种情况下,你可以看到它self.window被初始化并设置值但不是后一种情况.另外,如果self.window已经在第一种情况下声明并初始化但在第二种情况下不是,那么如何找到初始化代码?
它看起来像在这两种情况下,该@property声明是一样的-在这两种情况下,正如我所说,我试图登录的值self.window在第一线AppDelegate.m的application: didFinishLaunchingWithOptions:方法.
那么我错过了什么?我不知道为什么这两个案例的行为不同,尽管我没有在代码和故事板中发现任何差异.
我使用iOS 7和Xcode 5.谢谢.
好的,当您使用Storyboard或Nib创建项目时,项目设置将告诉项目storyboard/nib是"主界面".
这会触发应用程序在启动时加载该接口.这就是self.window在这些情况下创建的原因.
创建空应用程序时,没有要设置为主界面的界面.
然后你需要像这样自己创建窗口......
-(void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *someController = [UIViewController... //create your initial controller
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)
无论如何这样的事情.有一阵子了.
或者,如果您创建一个空应用程序,然后添加要用作初始笔尖的nib文件,则可以在项目设置中选择它.
在目标中.在"部署信息"部分中,从项目中的nib中选择"主界面".然后,这将在应用程序启动时加载该nib.
| 归档时间: |
|
| 查看次数: |
5364 次 |
| 最近记录: |