2011-07-20 141 views
0

切換到的Xcode 4後,我想我應該能夠建立並運行我的應用程序完全一樣我可以在Xcode 3的Xcode 4將不顯示應用程序的主屏幕

原來我不能。

Xcode 4有一個有趣的方式永遠不會顯示應用程序的視圖控制器,這很奇怪。

我可以告訴蘋果最終會迫使我們切換,這將導致我的應用程序無法運行。

在掛起之前沒有任何錯誤地取得application:didFinishLaunchingWithOptions:。最終應用程序在設備上崩潰 - 但在模擬器中永遠保留在Default.png中。

我以爲我可以去編輯application:didFinishLaunchingWithOptions:方法實例化視圖控制器本身的一個實例,並將其添加到窗口 - 只是爲了揭示也沒有工作。

經過多次失敗的嘗試 - 爲主視圖控制器創建單獨的UIWindows - 我決定將其添加到導航控制器。

幸運然後打動了我 - 但只有最簡單的形式。我查看了日誌,看到applicationDidBecomeActive:已被調用。

但是,像往常一樣,沒有這樣的運氣與任何形式的視圖顯示。

然後我決定看看是否可以在窗口中添加一個帶有藍色背景色和一些UI元素(按鈕,標籤等)的UIView,看看是否可以。

有趣的是,它做到了。

但爲什麼不爲主視圖控制器?在Xcode 4中沒有一次我成功地運行過我的應用程序(甚至在它構建失敗後打開它)。我已經嘗試將編譯器更改爲與Xcode 3中相同,但沒有運氣。

我真的很困惑,爲什麼應用程序的視圖控制器不會顯示。

對於任何人想給它一個嘗試,爲什麼它不工作,將不勝感激。

下面是AppDelegate的代碼,如果您需要視圖控制器的代碼,我可以將其粘貼到此處,但它超過2000行。

總之,這裏的.m文件:

#import "DocumentationAppDelegate.h" 
#import "DocumentationViewController.h" 

@implementation DocumentationAppDelegate 

@synthesize window; 
@synthesize viewController; 
@synthesize navigationController; 

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class])); 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class])); 

} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class])); 

    DocumentationViewController *vc = [[DocumentationViewController alloc] init]; 

    UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:vc]; 
    controller.navigationBarHidden = YES; 

    UIWindow *win = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    [win addSubview:controller.view]; 
    [win makeKeyAndVisible]; 

    return YES; 
} 

- (void)applicationWillTerminate:(UIApplication *)application { 

} 


- (void)dealloc { 
    [window release]; 
    [super dealloc]; 
} 

@end 

和.H

#import <UIKit/UIKit.h> 

@class DocumentationViewController; 

@interface DocumentationAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    DocumentationViewController *viewController; 
    UINavigationController *navigationController; 
} 

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet DocumentationViewController *viewController; 

@end 

如果任何人能幫助我在這裏將它極大讚賞。

回答

0

您的應用程序委託已經具有屬性窗口,viewController和navigationController。所以,你可以有應用中:didFinishLaunchingWithOptions:方法就是這樣,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    viewController = [[DocumentationViewController alloc] init]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 
    navigationController.navigationBarHidden = YES; 

    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 
+0

謝謝,但是,它仍然是行不通的。 –

相關問題