after adding local notification script in "didFinishLaunchingWithOptions" it said
[1627:60b] Application windows are expected to have a root view
controller at the end of application launch
and this is the code
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
mainStoryboard = nil;
if (IS_IPHONE_5) {
mainStoryboard = [UIStoryboard storyboardWithName:#"MainIPhone5" bundle:nil];
}
else {
mainStoryboard = [UIStoryboard storyboardWithName:#"MainIPhone" bundle:nil];
}
UILocalNotification *localNotification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotification) {
SelectedTask = [localNotification.userInfo objectForKey:#"FullTaskName"];
TaskViewController *TaskViewControllerVar;
TaskViewControllerVar = [mainStoryboard instantiateViewControllerWithIdentifier:#"TaskViewController"];
TaskViewControllerVar.SelectedTask = SelectedTask;
self.window.rootViewController = TaskViewControllerVar;
NSLog(#"1");
}else{
RecordingViewController *RecordingViewControllerVar;
RecordingViewControllerVar = [mainStoryboard instantiateViewControllerWithIdentifier:#"RecordingViewController"];
self.window.rootViewController = RecordingViewControllerVar;
NSLog(#"2");
}
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
return YES;
}
remove this line
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
you also need to add the views. Like this:
self.window.rootViewController = TaskViewControllerVar;
[self.window addSubview:TaskViewControllerVar.view];
and
self.window.rootViewController = RecordingViewControllerVar;
[self.window addSubview:RecordingViewControllerVar.view];
Related
I have two navigation controllers. How can I set the second one - stopwatch as an initial navigation controller?
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
self.swipeBetweenVC = [Swipe new];
[self setupRootViewControllerForWindow];
self.window.rootViewController = self.swipeBetweenVC;
[self.window makeKeyAndVisible];
return YES;
}
- (void)setupRootViewControllerForWindow
{
UIStoryboard *storyboard1 = [UIStoryboard storyboardWithName:#"Main" bundle: nil];
Stopwatch *controller1 = (Stopwatch *)[storyboard1 instantiateViewControllerWithIdentifier:#"Stopwatch"];
UINavigationController *stopwatch = [[UINavigationController alloc] initWithRootViewController:controller1];
NamesController *controller2 = (NamesController *)[storyboard1 instantiateViewControllerWithIdentifier:#"NamesController"];
UINavigationController *namesList = [[UINavigationController alloc] initWithRootViewController:controller2];
self.swipeBetweenVC.viewControllers = #[namesList, stopwatch];
}
Just put the stopwatch view first
self.swipeBetweenVC.viewControllers = #[stopwatch, namesList];
Currently you have some Swipe type set up as a root VC, change to self.window.rootViewController = stopwatch;
After launch I have a crash:
2015-11-13 17:47:50.744 app[18380:611105] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'Application windows are expected to have a root view controller at
the end of application launch'
I've read other questions with ios9 and root view controller and now my appdelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MainViewController *main = [[MainViewController alloc] initWithNibName:#"MainViewController" bundle:nil];
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
NSLog(#"window: %#",window.description);
if(window.rootViewController == nil){
UIViewController *vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
window.rootViewController = vc;
}
}
self.window.rootViewController = main;
[self.window setRootViewController:main];
[self.window makeKeyAndVisible];
return YES;
}
Unfortunately the problem is still there.
Maybe try getting rid of the loops:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.backgroundColor = [UIColor whiteColor];
MainViewController *main = [[MainViewController alloc] initWithNibName:#"MainViewController" bundle:nil];
window.rootViewController = main;
self.window = window;
[window makeKeyAndVisible];
return YES;
}
How to Add Navigation Controller for Universal App ie.. iPhone and iPad in AppDelegate.m file.
Simple as this,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window makeKeyAndVisible];
return YES;
}
I am trying to navigate from one view to another on touch of a button using iOS 5.0.
The code I am using
- (IBAction)Actionlogin:(id)sender {
NSLog(#" login button has been pressed");
NSLog(#"In init");
test_details *aSecondPageController=[[test_details alloc]initWithNibName:#"test_details" bundle:nil];
[self.navigationController pushViewController:aSecondPageController animated:NO];
}
I have two xib files test_details_iPhone.xib and test_details_iPad.xib
Inside my testdetails.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
NSLog(#"it is coming here in second view");
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
NSLog(#"it has been returned ");
return self;
}
LOGs
2013-04-25 11:06:17.191 app_gototest[3067:207] login button has been pressed
2013-04-25 11:06:17.194 app_gototest[3067:207] In init
2013-04-25 11:06:17.195 app_gototest[3067:207] it is coming here in second view
2013-04-25 11:06:17.196 app_gototest[3067:207] it has been returned
The view is not getting loaded onto the view. I suppose I am missing something.
application:didFinishLaunchingWithOptions: in appDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
** I am trying Jasper Blue's approach**
argc int 1
argv char ** 0xbfffed2c
*argv char * 0xbfffee44
In appDeleagte.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UINavigationController* navigationController;
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:_viewController];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:_viewController];
}
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
You code looks OK, so it must be that self.navigationController is nil. . . Have you set up a navigation controller?
For your code to work, your current UIViewController needs to be contained within a UINavigationController. . . you can set up the UINavigationController as the root view controller in your application delegate as follows:
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UINavigationController* navigationController;
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
navigationController = [UINavigationController alloc] initWithRootViewController:viewController];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
navigationController = [UINavigationController alloc] initWithRootViewController:viewController];
}
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
NB: You could clean the above code up a little, but you get the picture, which is that you have to set the root view controller to be a navigation controller, like this:
self.window.rootViewController = navigationController;
You could also make a custom root view controller if you like, but the above will let you achieve what you're trying to do - UINavigationController will be used as the navigation system throughout your app.
Your navigation controller is nil. So replace your didFinishLaunchingWithOptions method with
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
}
UINavigationController *navcontroller = navigationController = [UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = navcontroller;
[self.window makeKeyAndVisible];
return YES;
}
Now you have a navigation controller so the call to push method on the self.navigationController should push the second controller.
Please try
- (IBAction)Actionlogin:(id)sender {
NSLog(#" login button has been pressed");
NSLog(#"In init");
test_details *aSecondPageController=[[test_details alloc]initWithNibName:#"test_details_iPhone" bunndle:nil];
[self.navigationController pushViewController:aSecondPageController animated:NO];
}
// test_details_iPhone.xib and test_details_iPad.xib
//Change initWithNibName#"test_details" with test_details_iPhone or test_details_iPad
Here is the layout of my app.
ApplicationName
LoginViewController.h
LoginViewController.m
LoginView.xib
AppDelegate.h
AppDelegate.m
ViewController.h
ViewController.m
ViewController_iPhone.xib
ViewController_iPad.xib
Currently in my AppDelegate.m I have:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
LoginViewController *_loginViewController = [[LoginViewController alloc] initWithNibName:#"LoginView" bundle:[NSBundle mainBundle]];
self.loginViewController = _loginViewController;
[_loginViewController release];
[_window addSubview:[loginViewController view]];
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil] autorelease];
} else {
self.viewController = [[[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil] autorelease];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
My LoginView.xib has it's File's Owner defined as LoginViewController.
I was at first getting an error stating: reason: '-[UITableViewController loadView] loaded the "LoginView" nib but didn't get a UITableView.'"
I changed UITableViewController to UIViewController and I was able to run the app without an error. The only problem now is that my LoginViewController does not load. I see the blank grey ViewController_iPad.xib loading.
What am I missing here?
I can post up any other code that would be useful.
Thanks in advance!
You should be setting your window's root view controller to self.loginViewController.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.loginViewController = [[LoginViewController alloc] initWithNibName:#"LoginView" bundle:[NSBundle mainBundle]];
[self.loginViewController release];
self.window.rootViewController = self.loginViewController;
[self.window makeKeyAndVisible];
return YES;
}