【问题标题】:Is a MainWindow.xib truly needed in iOS application?iOS 应用程序真的需要 MainWindow.xib 吗?
【发布时间】:2011-12-13 20:22:17
【问题描述】:

在使用 Xcode 4.2 进行任何类型的 iOS 5.0 开发之前,Xcode 在模板中提供了“MainWindow.xib”。在下载并使用带有 iOS 5.0 的 Xcode 4.2 后,我注意到提供的模板都不包含任何“MainWindow.xib”文件。我们还需要这个吗?我注意到在 App_Delegate 的“应用程序 didFinishLaunchingWithOptions”方法中,模板现在包含创建一些“UIWindow”的代码,如果您有任何导航控制器,它会相应地更新窗口。

// code that was pulled from a Master Detail application template
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

我想我的问题是,我还需要“MainWindow.xib”吗?如果需要,那为什么 Apple 模板会排除它们?

【问题讨论】:

    标签: xcode interface-builder ios5 xib


    【解决方案1】:

    我总是对 MainWindow.xib 的使用感到困惑:即使使用它我仍然需要设置窗口的 rootViewController 或 addSubview 给它。 MainWindow.xib 中不包含该信息吗?为什么我还需要告诉窗口呢?

    所以删除 MainWindow.xib 似乎是有道理的。

    【讨论】:

      【解决方案2】:

      我认为它现在不存在的原因是,以编程方式创建窗口比打开 xib 文件并取消归档对象更有效。一般来说,如果你可以在一行代码中做到,你应该在代码中做到这一点。

      阅读 Matthew Gillingham 的回答,了解如何手动更改旧项目以使其在没有 MainWindow.xib 的情况下工作。

      【讨论】:

      • 那么你认为绕过“MainWindow.xib”是未来所有项目的必经之路吗?
      • 是的,我总是以编程方式为我的所有项目创建一个窗口,因为您知道,窗口中出现的第一件事是由视图控制器管理的。拥有一个只有一个窗口而没有其他任何东西的 xib 不会给你任何优势。
      【解决方案3】:

      不使用 MainWindow.xib 一直是一个选项。 UIWindow 可以通过执行以下操作以编程方式加载:

      1) 确保 main.m 中对 UIApplicationMain 的调用如下所示:

      UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName");
      

      而不是这样:

      UIApplicationMain(argc, argv, nil, nil);
      

      2) 确保 Info.plist 没有“MainWindow.xib”作为主 nib 文件的值。

      3) 在应用委托中以编程方式加载 UIWindow。

      所以,不,您不必使用 MainWindow.xib,实际上,您从未使用过。你总是可以通过编程来做事。

      这是一个很好的问题,为什么 Apple 在默认 Xcode 设置中进行了此更改,我不知道答案。但这可能与性能或向 ARC 的过渡或小应用程序文件大小或其他一些因素有关。

      【讨论】:

      • 是否可以提供一些优点和缺点?我想我正试图找出关于“MainWindow.xib”的使用或不使用的最佳选择。
      • 我一直在考虑这个问题,但实际上我遇到了一个问题,想出太多的专业人士。我想它允许您以更直观的方式设置基于标签栏的应用程序(或者可能是导航控制器),因为您可以在 Interface Builder 中操作容器视图。现在,当我使用模板创建一个新的选项卡栏应用程序时,选项卡栏只存在于代码中。但是由于使用 Interface Builder 创建和使用视图控制器仍然很容易,所以我很难想到已经丢失了很多东西。我可能会在不使用 MainWindow.xib 的情况下继续前进。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      相关资源
      最近更新 更多