【问题标题】:iOS self.window - when is it created?iOS self.window - 它是什么时候创建的?
【发布时间】:2014-01-27 12:11:12
【问题描述】:

当您使用单视图模板启动您的应用,并在 AppDelegate.m 的application: didFinishLaunchingWithOptions: 方法的第一行添加NSLog(@"self.window = %@", self.window); 时,您可以看到self.window 存在于您的应用中。

但是,当您使用空模板启动应用程序并尝试将self.window 记录到控制台时,结果返回null。即使您添加了故事板和视图控制器,并将其视图控制器设置为初始视图控制器,并尝试记录 self.window,结果是相同的 - 其值设置为 null

请注意,无论您采用哪种方式,您都可以在 AppDelegate.h 中找到默认声明 @property (strong, nonatomic) UIWindow *window;。所以我想知道为什么在第一种情况下,您可以看到 self.window 已初始化并设置了值,但在后一种情况下却没有。另外,如果self.window在第一种情况下已经声明并初始化,但在第二种情况下没有,我怎样才能找到初始化代码?

看起来在这两种情况下,@property 声明是相同的 - 正如我所提到的,在这两种情况下,我都尝试在AppDelegate.m 的@987654334 的第一行中记录self.window 的值@方法。

那么我错过了什么?尽管我在代码和情节提要中没有发现任何差异,但我不知道为什么这两种情况的行为不同。

我使用 iOS 7 和 Xcode 5。谢谢。

【问题讨论】:

    标签: ios objective-c appdelegate uiwindow


    【解决方案1】:

    好的,当您使用 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];
    }
    

    反正就是这样。已经有一段时间了。

    或者,如果您创建一个空应用程序,然后添加一个要用作初始 nib 的 nib 文件,那么您可以在项目设置中选择它。

    在一般目标中。在“部署信息”部分中,从项目的 nib 中选择“主界面”。这将在应用程序启动时加载该笔尖。

    【讨论】:

    • 感谢您的精彩回答!这正是我要问的......那么在使用空模板启动应用程序时,您会推荐哪种方式(编写代码或在 Target 上设置)?
    • 如果您只是使用代码而根本没有 nib,那么您需要对其进行编码。如果您在第一个视图中使用笔尖,请设置主界面。
    【解决方案2】:

    Xcode将UIWindow声明为IBOutletAppdelegate中的IBOutlet对象,并且xcode本身将其与默认ViewController.nib的窗口挂钩或连接(由Xcode在创建非空项目时创建)。无需初始化任何对象,如果您已将其声明为 Iboutlet 并将其与 nib 中的任何 UIController 连接。

    现在在空项目中,如果您想创建窗口,请将其声明为插座并将其与 nib 中存在的窗口连接,并将您的 AppDelegate 设为 Files OWner。

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多