2012-06-15 30 views
0

因此,在花了上周精心设计和规划我的应用程序后,有一个要求稍作修改。为了进行这种更改,我必须将所有内容都作为导航控制器的一部分,以便我可以更改视图(当前使用的子视图无法正常工作)。iOS应用程序窗口没有初始化

我修改了我的AppDelegate.h和AppDelegate.m以引用新的窗口和视图,但是我只是在启动时出现黑屏。

使用调试器后,我注意到AppDelegate中的窗口指针仍然指向内存地址0,它应该已经初始化到我使用接口构建器连接到的窗口。

很明显,我正在做一些完全错误的事情,而且我不知道该从哪里出发。我甚至不知道我应该提供什么信息。要对这里的安全方面是我AppDelegate.h:

#import <UIKit/UIKit.h> 
#import "InitialisationController.h" 


@interface AppDelegate : NSObject <UIApplicationDelegate> 

@property (strong, nonatomic) IBOutlet UIWindow *window; 
@property (strong, nonatomic) IBOutlet UINavigationController *navigationController; 
@property (strong, nonatomic) IBOutlet InitialisationController *initialisationController; 

@end 

和didFinishLaunchingWithOptions方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self.window addSubview:navigationController.view]; 
    [self setInitialisationController:[[InitialisationController alloc] initWithNibName:@"InitialisationController" bundle:nil]]; 
    //self.window.rootViewController = navigationController; 
    [self.window makeKeyAndVisible]; 

    //[self.navigationController pushViewController:initialisationController animated:YES]; 
    [self.navigationController.view addSubview:[[self initialisationController] view]]; 

    return YES; 
} 

有谁有一丝的想法?

谢谢!

回答

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

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    self.initialisationController = [[InitialisationController alloc] initWithNibName:@"InitialisationController" bundle:nil]]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:self.initialisationController]; 
    [self.window addSubview:[navigationController view]]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

我认为这会帮助你。

+0

没有viewController,因此该方法的第三行不起作用。 –

+0

对不起。我编辑过。它是'initialisationController'。 –

+0

这似乎已经完成了这项工作。一些奇怪的事情正在发生,但至少它正在加载一些东西。 –

0

当你初始化你的UINavigationController它应该是这样的

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:[self initialisationController]]; 

而且删除此行

[self.navigationController.view addSubview:[[self initialisationController] view]]; 
+0

一点都没有遗憾的是改变任何东西。 –

+0

你正在使用什么xcode版本,什么是ios? –

+0

Xcode 4.3.2与iOS 5.1 –

0

那么你不需要任何上述属性,如果你使用的接口生成器除了UIWindow。只需进入IB并将右箭头拖至故事板中的第一个UINavigationController即可。

现在您在AppDelegate中的UIWindow将使用导航控制器作为其根视图。

之后,您的applicationDidDinishLaunching方法应该是空白的。

不知道你的应用程序是如何设置的,但在我的大部分内容中,UIWindow是由AppDelegate为我初始化的,所以我不必那样做。创建一个新项目并查看AppDelegate的锅炉板代码可能是明智的。大多数方法来自UIApplicationDelegate协议,它们只是为了向您提供有关应用程序执行中的关键事件的信息,而不是手动设置它,这是为您完成的。所以这些方法大多是空白的。

参见: UIApplicationDelegate协议参考 http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html

相关问题