2011-11-24 37 views
0

我已經使用「創建基於窗口的應用程序」選項在Xcode 3.x中啓動了一個項目。該項目似乎從info.plist條目自身加載主筆尖文件:「主筆尖文件基本名稱」。使用UIViewController加載nib文件

現在我想使用UIViewController加載主要的筆尖文件。我可以使用視圖控制器刪除info.plist條目並在「application:didFinishLaunchingWithOptions:」中以編程方式加載nib文件嗎?

(目前該項目已經被移動到的Xcode 4.2,但我猜編譯器版本應該沒有多大關係的這種情況下...)

希望有人見地在這方面可以幫助...

回答

1

如果你正在升級同一個項目,那麼你不能這樣做。

Apple在其模板中使用的用於訪問應用程序的機制在這些版本之間發生了變化。

在3.x中,Main Interface在您的項目設置中設置爲MainWindow.xib。在此xib中,您的應用程序委託作爲對象加載。

在4.x中的main.m特別是與該行加載應用程序的委託:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

它已經3.x和4.x之間改變的最後一個參數

你最好的選擇是創建一個新項目並查看模板代碼是如何連接的。

UPDATE

首先,如果你的項目工作,你真的需要改變呢?

如果是這樣那麼我用從一個全新的項目

轉到您的main.m模板代碼,並改變從

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

實施,

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

NB變化AppDelegate添加到您的應用程序委託類的名稱。

您還需要更新您的應用程序委託才能以編程方式創建UIWindow

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

    // Instantiate your rootViewController 

    self.window.rootViewController = yourRootViewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

這是我能想到的,可能會有一些其他的字幕最明顯的差異,但我不這麼久,我不記得使用3.x的。

+0

感謝您的回答。太糟糕了「獅子」不能運行3.x了。您能否更詳細地說明「模板代碼如何連接」的含義? – Stanley

+0

感謝您的詳細解釋。很遺憾,在早期階段不使用根視圖控制器。我不知道視圖控制器的重要性,因爲我對可可編碼模式不熟悉。我只是希望有一個有效的視圖控制器來翻轉視圖。也許我應該想辦法在沒有控制器的情況下做到這一點。 – Stanley

+0

在iOS 4中,一個警告'rootViewController'被添加到'UIWindow',所以如果你想支持較老,那麼你應該以舊的方式添加你的視圖控制器,例如, '[self.window addSubView:yourViewController.view];' –