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;  
}

有没有人有一丝一毫的想法?

谢谢!

- (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;
}

我认为这对您有所帮助。

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

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

同时删除此行

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

好吧,如果您使用界面构建器,则实际上不需要上述任何属性,除了UIWindow。只需进入 IB 并将向右箭头拖动到故事板中的第一个UINavigationController即可。

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

之后,您的应用程序DidDinishLaunch方法应该是空白的。

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

看:UIA应用程序委托协议参考http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html

最新更新