Как правильно создать контроллер корневого представления? - PullRequest
1 голос
/ 16 октября 2011

После обновления до xCode 4.2 я получаю следующее предупреждение ...

Ожидается, что приложения будут иметь контроллер корневого представления в конце запуска приложения

Прочитав столько, сколько я мог найти в Интернете о RootViewController, я не уверен, правильно ли я создал свой контроллер корневого представления. Я создал его давным-давно, когда впервые учился программировать в xCode.

У меня один вопрос: можно ли назвать контроллер корневого представления чем-то другим, кроме RootViewController? Каждый пример, который я сейчас вижу, имеет имя RootViewController. Я также вижу, как это синтезируется в приложении делегата, как это ...

@synthesize rootViewController = _rootViewController;

Я не понимаю, что это делает. Почему бы просто ...

@synthesize rootViewController;

В любом случае я менял имя моего корневого контроллера представления на RootViewController и следовал примеру, найденному на cupsofcocoa.com . Но даже после внесения изменений я получаю предупреждение «... ожидается наличие корневого контроллера ...».

Если у кого-то есть время взглянуть и сообщить мне, что мне не хватает, я перечислю важные части своего кода инициализации ниже.

Спасибо,

John

  //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 ]

1 голос
/ 17 октября 2011
- (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;
}

Поставьте return NO внутри оператора else, а в конце поставьте return nil;Надеюсь, что это поможет.

0 голосов
/ 13 октября 2014

Ожидается, что приложения будут иметь контроллер корневого представления

Заменить в AppDelegate

 [window addSubview:[someController view]];

до

 [self.window setRootViewController:someController];
...