Я получаю следующий код ошибки при попытке протестировать запуск приложения.Корневой контроллер iOS при ошибке запуска
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]));
}
}
Используется формат StoryBoard. Как мне связать его? Причина, по которой я предполагал, что она уже связана, поскольку она работала до этого. – jskrwyk
Ваш VC должен быть «Начальным контроллером просмотра» (в Инспекторе атрибутов), и ваш AppDelegate должен иметь сильное свойство «UIWindow * window». EDIT: И ваш SB должен быть «Главной раскадрой» в вашем Info.plist –
Я проверил все эти и все они правильные. Это изменилось только при использовании кода в BattTimeViewController.m. – jskrwyk