2011-10-24 37 views
9

在使用Xcode 4.2進行任何類型的iOS 5.0開發之前,Xcode在模板中提供了一個「MainWindow.xib」。在使用iOS 5.0下載和使用Xcode 4.2之後,我注意到沒有提供的模板包含任何「MainWindow.xib」文件。我們是否需要這個?我注意到在App_Delegate中的「application didFinishLaunchingWithOptions」方法中,模板現在包含創建一些「UIWindow」的代碼,並且如果您有任何導航控制器,它會相應地更新窗口。是iOS應用程序中真正需要的MainWindow.xib嗎?

// 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」下去,如果是這樣,那麼爲什麼蘋果的模板中排除?

回答

4

我認爲它現在不存在的原因是以編程方式創建窗口比打開xib文件和解除對象解析效率更高。一般來說,如果你可以在一行代碼中完成,你應該在代碼中完成。

閱讀Matthew Gillingham的解答,瞭解如何在沒有MainWindow.xib的情況下手動更改舊項目以使其工作。

+0

那麼你認爲繞過「MainWindow.xib」是未來所有項目的方式嗎? – 5StringRyan

+2

是的,我總是爲我的所有項目編程創建一個窗口,因爲,您知道,窗口中出現的第一件事是由視圖控制器管理。有一個只有一個窗口的xib,沒有別的不會給你帶來任何好處。 – Costique

15

它始終是一個不使用MainWindow.xib的選項。在一個UIWindow可以以編程方式在做加載以下:

1)確保在main.m文件調用UIApplicationMain看起來是這樣的:

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

,而不是這樣的:

UIApplicationMain(argc, argv, nil, nil); 

2)確保Info.plist的主要nib文件的值不是「MainWindow.xib」。

3)以編程方式在應用程序委託中加載UIWindow。

所以,不,你不必使用MainWindow.xib,實際上,你從來沒有。你總是可以通過編程來做事情。

這是一個很好的問題,爲什麼蘋果在默認的Xcode設置中做了這個改變,我不知道答案。但它可能必須伴隨性能或過渡到ARC或小應用程序文件大小或完全不同。

+0

是否可以提供一對夫婦的優點和缺點?我想我正在試圖弄清楚什麼是向前推進使用或不使用「MainWindow.xib」的最佳選擇。 – 5StringRyan

+0

我一直在想它,而且我實際上遇到了一個問題太多的專業人士。我猜想它允許您以更多的視覺方式設置基於標籤欄的應用程序(或者可能是導航控制器),因爲您可以在Interface Builder中操作容器視圖。現在,當我使用模板創建新的標籤欄應用程序時,標籤欄僅在代碼中存在。但是由於使用Interface Builder創建和使用視圖控制器仍然很容易,所以很難讓我認爲這已經失去了很多。我可能會前進而不使用MainWindow.xib。 –

2

我總是對MainWindow.xib的使用感到困惑:即使有了它,我仍然需要爲它設置窗口的rootViewController或addSubview。是不是包含在MainWindow.xib中的信息?爲什麼我仍然需要告訴窗口這個?

因此,刪除MainWindow.xib似乎有意義。

相關問題