0

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

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

有没有人有一点想法?

谢谢!

4

3 回答 3

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

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

于 2012-06-15T13:50:10.913 回答
0

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

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

同时删除此行

[self.navigationController.view addSubview:[[self initialisationController] view]]; 
于 2012-06-15T13:44:50.943 回答
0

好吧,如果您使用除UIWindow. 只需进入 IB 并将右指向箭头拖动到UINavigationController故事板中的第一个。

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

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

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

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

于 2012-06-15T14:08:01.773 回答