切换到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
如果有人能帮助我,我们将非常感激。
答案 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;
}