iOS App窗口未初始化

时间:2012-06-15 13:39:17

标签: iphone objective-c ios cocoa uiwindow

因此,在花了最后一周仔细设计和规划我的应用程序之后,一个请求已经进入稍微改变它。为了进行此更改,我必须将所有内容都作为导航控制器的一部分,以便我可以更改视图(当前使用的子视图无法正常工作)。

我已经修改了我的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;  
}

有没有人有任何想法?

谢谢!

3 个答案:

答案 0 :(得分: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;
}

我认为这会对你有所帮助。

答案 1 :(得分:0)

初始化UINavigationController时,它应该是这样的

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

同时删除此行

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

答案 2 :(得分: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