0

可能重复:
XCode 4.5.1,应用程序窗口应该在应用程序启动结束时有一个根视图控制器

我是 IOS 应用程序开发的菜鸟。

我使用没有情节提要的 Xcode 4.5.1。

我正在升级 IOS 4 应用程序,因为它无法在 IOS 6 设备上正确运行。包含一个问题和五个答案的主视图运行一次,并在用户通过按下带有所需答案的按钮提交后停止,然后它应该重新加载一个新问题和一组新问题。

我在日志输出中得到了臭名昭著的“应用程序窗口应该在应用程序启动结束时有一个根视图控制器”。

我已经阅读并尝试了7520971中的所有评论和解决方案,但无济于事......仍然出现错误,这似乎阻止我正确加载视图。

这是我的 appDelegate.h 中的内容

/*
 *  AnimViewAppDelegate.h
 *  AnimView
 *
 *  Created by Administrateur local on 11-01-19.
 *  Copyright 2011 __MyCompanyName__. All rights reserved.
 *
 */


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

@interface PPScaleAppDelegate : NSObject <UIScrollViewDelegate> {
    UIWindow *window;
    RootNavigationController *RootNavigationViewController;
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) RootNavigationController *RootNavigationViewController;
@end

我的 appDelegate.m

//
//  AnimViewAppDelegate.m
//  AnimView
//
//  Created by Administrateur local on 11-01-19.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "PPScaleAppDelegate.h"
#import "QuestionView.h"

@implementation  PPScaleAppDelegate
@synthesize window;
@synthesize RootNavigationViewController;

//- (void)applicationDidFinishLaunching:(UIApplication *)application {

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

    //Create the main screen
    //CGRect frame = [[UIScreen mainScreen] bounds];
    //self.window = [[UIWindow alloc] initWithFrame:frame];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //2012


    //Create the main view controller
    RootNavigationViewController = [[RootNavigationController alloc] initWithNibName:NULL bundle:NULL];
    //[window addSubview:RootNavigationViewController.view];

    [self.window setRootViewController:RootNavigationViewController];

    //Show the main window
    [self.window makeKeyAndVisible];

    return YES;
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

。H

//
//  RootNavigationController.h
//  IPhonePPS
//
//  Created by Administrateur local on 11-02-11.
//  Copyright 2011 Le Groupe CDGI Inc. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "QuestionView.h"
#import "ResultView.h"
#import "ResultTableView.h"


@interface RootNavigationController : UINavigationController {

    QuestionView *QuestionViewController;
    ResultView *ResultViewController;
    ResultTableView *ResultTableViewController;

}
@property(nonatomic, assign) QuestionView *QuestionViewController;
@property(nonatomic, assign) ResultView *ResultViewController;
@property(nonatomic, assign) ResultTableView *ResultTableViewController;

-(void)switchToResultMode:(QuestionPath *)QuestionPath;
-(void)switchToResultTableMode;
-(void)switchBack:(BOOL)Reset;
@end

.m

//
//  RootNavigationController.m
//  IPhonePPS
//
//  Created by Administrateur local on 11-02-11.
//  Copyright 2011 Le Groupe CDGI Inc. All rights reserved.
//

#import "RootNavigationController.h"

@implementation RootNavigationController
@synthesize QuestionViewController, ResultViewController, ResultTableViewController;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:nibBundleOrNil {

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        // Initialization code.
        QuestionViewController = [[QuestionView alloc] initWithNibName:NULL bundle:NULL];
        ResultViewController = [[ResultView alloc] initWithNibName:NULL bundle:NULL];
        ResultTableViewController = [[ResultTableView alloc] initWithNibName:NULL bundle:NULL];

        //Set the navigation bar hidden
        [self setNavigationBarHidden:YES];

        //Push the question view on the stack
        [self pushViewController:self.QuestionViewController animated:YES];

    }
    return self;
}

- (void)dealloc {
    [super dealloc];
}

-(void)switchToResultMode:(QuestionPath *)QuestionPath {
    [self pushViewController:ResultViewController animated:YES];
    [ResultViewController setQuestionPath:QuestionPath];
}

-(void)switchToResultTableMode {
    [self pushViewController:ResultTableViewController animated:YES];
}

-(void)switchBack:(BOOL)Reset{
    if(Reset){
        if([self.viewControllers count] == 3){
            [self popToRootViewControllerAnimated:YES];
        }else {
            [self popViewControllerAnimated:YES];
        }
        [QuestionViewController resetAnswers];
    }else {
        [self popViewControllerAnimated:YES];
    }
}

//-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
//  if([self visibleViewController] == self.ResultTableViewController || toInterfaceOrientation == UIInterfaceOrientationPortrait){
//      return YES;
//  }else {
//      return NO;
//  }
//}

- (BOOL) shouldAutorotate {
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

@end

花了整整两天的时间尝试调试,但我放弃了,非常感谢您对这个问题的帮助

公关

4

3 回答 3

2

如果您的导航控制器没有笔尖,最好只使用 [[alloc] init]。此外,您的导航控制器应使用其自己的 rootViewcontroller 进行初始化。我不知道你想成为第一个,但它应该是这样的:

  MyFirstViewControllerClass *rootVC = [MyFirstViewControllerClass alloc] initWithNibName:@"MyFirstViewController" bundle:nil];
  RootNavigationController *nav = [[RootNavigationController alloc]initWithRootViewController:rootVC];
  self.window.rootViewController = nav;
于 2012-11-07T17:36:55.633 回答
1

您应该首先使用 rootViewController 初始化您的 RootNavigationController :

[RootNavigationController initWithRootViewcontroller:QuestionViewController];

您可以从以下位置找到UINavigationController reference

因为 UINavigationController 类继承自 UIViewController 类,所以导航控制器有自己的视图,可以通过 view 属性访问。部署导航界面时,您必须将此视图安装为您正在创建的任何视图层次结构的根。

例如,在-(void)switchBack:(BOOL)Reset;你 popToRootViewController 甚至没有设置它。

于 2012-11-07T17:08:16.063 回答
1

您正在调用[self.window setRootViewController:RootNavigationViewController];通知 - setRootViewController。它需要一个视图控制器。您的 RootNavigationViewController 是此处引用的 NavigationController,@interface RootNavigationController : UINavigationController而不是 viewController。

看起来你应该做这样的事情

RootNavigationViewController = [[RootNavigationController alloc] initWithNibName:NULL bundle:NULL];
[window makeKeyAndVisible];
[window addSubview:RootNavigationViewController.view];

(引用自Programmatically build/navigation a Navigation Controller

我不确定是否使用

[self pushViewController:self.QuestionViewController animated:YES];

在 RootNavigationViewController 中与做这样的事情相同

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

但这应该为您指明调试问题的好方向。

于 2012-11-07T17:14:47.580 回答