在使用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;
}
我想我的问题是,我是否需要一个“MainWindow.xib”,如果是这样,那么为什么Apple模板会将它们排除?
答案 0 :(得分:15)
始终可以选择不使用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或小应用程序文件大小或完全不同的东西。
答案 1 :(得分:4)
我认为现在缺席的原因是以编程方式创建窗口比打开xib文件和取消归档对象要高效得多。通常,如果您可以在一行代码中执行此操作,则应在代码中执行此操作。
阅读Matthew Gillingham的回答,了解如何在没有MainWindow.xib的情况下手动更改旧项目的工作。
答案 2 :(得分:2)
我总是对MainWindow.xib的使用感到困惑:即使使用它,我仍然需要设置window的rootViewController或addSubview。 MainWindow.xib中是否包含该信息?为什么我还需要告诉窗口呢?
因此,删除MainWindow.xib似乎有意义。