Xcode 4不会显示应用程序的主屏幕

时间:2011-07-20 10:23:20

标签: ios xcode uiview uiviewcontroller rootview

切换到Xcode 4之后,我认为我能够像在Xcode 3中那样构建和运行我的应用程序。

原来我不能。

Xcode 4有一种有趣的方式永远不会显示应用程序的视图控制器,这很奇怪。

我可以告诉Apple最终会迫使我们切换,这将导致我的应用程序无法运行。

在挂起之前,它会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

如果有人能帮助我,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

您的app委托已经具有属性窗口,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;
}