Корневой контроллер iOS при запуске - PullRequest
0 голосов
/ 10 марта 2012

При попытке запустить приложение я получаю следующий код ошибки.

Application windows are expected to have a root view controller at the end of application launch

Приложение работало нормально, как приложение пустой оболочки (например, не реализовано никаких функций), но как только я добавил функции в ViewController.m, оно начало генерировать эту ошибку.

ViewController.m содержит.

//
//  BattTimeViewController.m
//  BattTime
//
//  Created by James Krawczyk on 09/03/2012.
//  Copyright (c) 2012 James Krawczyk. All rights reserved.
//

#import "BattTimeViewController.h"

@interface BattTimeViewController ()

@end

@implementation BattTimeViewController
@synthesize resDisplay;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setResDisplay:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (void)batteryStatus
{
    // Get current date time

    datetrack = [NSDate date];

    // Instantiate a NSDateFormatter

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    // Set the dateFormatter format

    //[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    // or this format to show day of the week Sat,11-12-2011 23:27:09

    [dateFormatter setDateFormat:@"HH:mm:ss"];

    // Get the date time in NSString

    NSString *dateInStringFormated = [dateFormatter stringFromDate:datetrack];

    NSLog(@"%@", dateInStringFormated);

    // Release the dateFormatter

    //[dateFormatter release]; 


    NSArray *batteryStatus = [NSArray arrayWithObjects: 
                              @"Battery status is unknown.", 
                              @"Battery is in use.", 
                              @"Battery is charging.", 
                              @"Battery is fully charged.", nil];

    if ([[UIDevice currentDevice] batteryState] == UIDeviceBatteryStateUnknown)
    {
        [resDisplay setText:[batteryStatus objectAtIndex:0]];  
        NSLog(@"%@", [batteryStatus objectAtIndex:0]);
    }
    else
    {   
        NSString *msg = [NSString stringWithFormat:
                         @"Battery charge level: %0.2f%%\n%@", [[UIDevice currentDevice] batteryLevel] * 100, dateInStringFormated ];
        [resDisplay setText:msg];  
        NSLog(@"%@", msg);
    }
}

- (void)loadView 
{

    // Enable monitoring of battery status
    [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

    // Print current status
    [self batteryStatus];

    // Request to be notified when battery charge or state changes
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStatus) name:UIDeviceBatteryLevelDidChangeNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStatus) name:UIDeviceBatteryStateDidChangeNotification object:nil];

}

- (void)dealloc 
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];

}
@end

ViewController.h is;

//
//  BattTimeViewController.h
//  BattTime
//
//  Created by James Krawczyk on 09/03/2012.
//  Copyright (c) 2012 James Krawczyk. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface BattTimeViewController : UIViewController
{
        NSDate  *datetrack;
}

@property (weak, nonatomic) IBOutlet UILabel *resDisplay;




@end

Я проверил некоторые другие вопросы и тоже проверил main.m, но, насколько я знаю, там все выглядит хорошо.Однако, как я уже говорил, все работало нормально, пока я не добавил эти функции.

Наконец, main.m это

//
//  main.m
//  BattTime
//
//  Created by James Krawczyk on 09/03/2012.
//  Copyright (c) 2012 James Krawczyk. All rights reserved.
//

#import <UIKit/UIKit.h>

#import "BattTimeAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([BattTimeAppDelegate class]));
    }
}

1 Ответ

1 голос
/ 10 марта 2012

Я не знаю, использует ли ваш BattTimeAppDelegate NIB, раскадровку или (мазохистский) код для создания окна, но эта ошибка означает, что у вашего экземпляра UIWindow нет rootViewController. Если вы используете NIB или SB, вам нужно связать rootViewController окна с вашим BattTimeViewController. Если вы используете код (пожалуйста, не надо), вам нужно сделать что-то вроде "window.rootViewController = aHandMadeBattTimeViewController;"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...