如何正确创建根视图控制器?

时间:2011-10-16 06:40:21

标签: iphone xcode uiviewcontroller root

升级到xCode 4.2后,我收到以下警告......

  

应用程序在应用程序启动结束时应该有一个根视图控制器

我在线阅读关于RootViewController的内容后,我不确定我是否已正确创建了我的根视图控制器。很久以前,当我第一次学习xCode编程时,我创建了它。

我有一个问题是可以将根视图控制器命名为RootViewController以外的东西。我现在看到的每个例子都将它命名为RootViewController。我也看到它在app委托中合成这样......

@synthesize rootViewController = _rootViewController;

我不明白这是做什么的。为什么不呢......

@synthesize rootViewController;

无论如何,我将根视图控制器的名称更改为RootViewController,并按照我在cupsofcocoa.com找到的示例进行操作。但即使在变化之后,我仍然会得到“......预计会有一个根控制器......”警告。

如果有人有时间看一看并让我知道我错过了什么,我已在下面列出了我的初始化代码的重要部分。

谢谢,

约翰

  //RootViewController.h
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController  {   

}
@end

  //RootViewController.m
#import "RootViewController.h"
#import "JetLoggerAppDelegate.h"

@implementation RootViewController
@end

  //JetLoggerAppDelegate.h   my app delegate 
#import <UIKit/UIKit.h>
@class RootViewController;

@interface JetLoggerAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    RootViewController *rootViewController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;
@end

  //.m app delegate
#import "JetLoggerAppDelegate.h"
#import "RootViewController.h"   //I don't think I need this here

@implementation JetLoggerAppDelegate

@synthesize window;
@synthesize rootViewController = _rootViewController;

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

    if ([launchOptions count] == 0) {
        _rootViewController = [[RootViewController alloc] init];
        self.window.rootViewController = self.rootViewController;
        [window makeKeyAndVisible];        
        return YES;

    }else{
        [JLHelper showAlertWithTitle:@"" message:[NSString stringWithFormat:@"launchOptions: %@", launchOptions]];

    }

    return NO;

}

  //main.m
#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"JetLoggerAppDelegate");
    [pool release];
    return retVal;
}

2 个答案:

答案 0 :(得分:1)

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

    if ([launchOptions count] == 0) {
        _rootViewController = [[RootViewController alloc] init];
        self.window.rootViewController = self.rootViewController;
        **[window addSubview:_rootViewController.view];**
        [window makeKeyAndVisible];
        return YES;

    }else{
        [JLHelper showAlertWithTitle:@"" message:[NSString stringWithFormat:@"launchOptions: %@", launchOptions]];
 return NO;
    }
return nil;
}

在else语句中放回NO,最后把return nil;希望这有帮助。

答案 1 :(得分:0)

应用程序应具有根视图控制器

在AppDelegate中替换

 [window addSubview:[someController view]];

 [self.window setRootViewController:someController];