0

重複の可能性:
XCode 4.5.1、アプリケーションウィンドウには、アプリケーションの起動時にルートビューコントローラーが必要です。

私はIOSアプリ開発の初心者です。

ストーリーボードなしでXcode4.5.1を使用しています。

iOS 6デバイスで正しく実行できないため、IOS4アプリをアップグレードしています。質問と5つの回答を含むメインビューは1回実行され、ユーザーが目的の回答のボタンを押してコミットした後、そこで停止します。その後、新しい質問と新しい質問のセットを再読み込みする必要があります。

ログ出力に、悪名高い「アプリケーションの起動時に、アプリケーションウィンドウにルートビューコントローラーが必要です」というメッセージが表示されます。

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

これをデバッグするために2日間を費やしましたが、私はあきらめて、この問題についてあなたの助けを本当に感謝します

PR

4

3 に答える 3

2

ナビゲーション コントローラー用の nib がない場合は、[[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 クラスを継承するため、ナビゲーション コントローラーにはビュー プロパティを介してアクセスできる独自のビューがあります。ナビゲーション インターフェイスを展開する場合、作成するビュー階層のルートとしてこのビューをインストールする必要があります。

たとえば、-(void)switchBack:(BOOL)Reset;popToRootViewController を設定していなくても。

于 2012-11-07T17:08:16.063 に答える
1

[self.window setRootViewController:RootNavigationViewController];Notice - setRootViewControllerを呼び出しています。viewController が必要です。RootNavigationViewController は、@interface RootNavigationController : UINavigationControllerviewController ではなく、ここで参照されている NavigationController です。

このようなことをする必要があるようです

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

(プログラムによるナビゲーション コントローラーのビルド/ナビゲートから参照)

使ってるかどうかわからない

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

RootNavigationViewController では、このようなことを行うのと同じです

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

しかし、それは問題をデバッグするための良い方向を示しているはずです。

于 2012-11-07T17:14:47.580 に答える