iOS应用程序中真的需要MainWindow.xib吗?

5St*_*yan 9 xcode interface-builder xib ios5

在使用Xcode 4.2进行任何类型的iOS 5.0开发之前,Xcode在模板中提供了"MainWindow.xib".下载并使用iOS 5.0使用Xcode 4.2后,我注意到所提供的模板都不包含任何"MainWindow.xib"文件.我们还需要这个吗?我注意到在App_Delegate中的"application 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;
}
Run Code Online (Sandbox Code Playgroud)

我想我的问题是,我是否需要更长时间的"MainWindow.xib",如果是这样,那么为什么Apple模板会排除它们呢?

Mat*_*ham 15

一直以来都不使用MainWindow.xib.可以通过执行以下操作以编程方式加载UIWindow:

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

UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName");
Run Code Online (Sandbox Code Playgroud)

而不是这个:

UIApplicationMain(argc, argv, nil, nil);
Run Code Online (Sandbox Code Playgroud)

2)确保Info.plist没有值"MainWindow.xib"作为主nib文件.

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

所以,不,你不必使用MainWindow.xib,实际上,你从来没有.你总是可以通过编程方式做事.

这是一个很好的问题,为什么Apple在默认的Xcode设置中进行了此更改,我不知道答案.但它可能需要具有性能或过渡到ARC或小应用程序文件大小或完全不同的东西.


Cos*_*que 4

我认为它现在不存在的原因是,以编程方式创建窗口比打开 xib 文件并取消归档对象要高效得多。一般来说,如果你可以用一行代码完成它,你应该用代码来完成。

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

  • 是的,我总是以编程方式为我的所有项目创建一个窗口,因为您知道,窗口中出现的第一个内容无论如何都是由视图控制器管理的。拥有一个只有窗户而没有其他东西的xib不会给你带来任何优势。 (2认同)