Segue from segmentcontrol in XIB Viewcontroller to Storyboard Viewcontroller - xib

I have a segment control in a viewcontroller (UISegmentController.h, UISegmentController.m, UISegmentController.xib) created in a xib. Now I am trying to segue (ideally push) to Storyboard viewcontroller (ChartviewController.h, ChartviewController.m) I created. This Viewcontroller will hold images. I tried to perform this push as below:
-(IBAction) segmentedControlIndexChanged;
{
//some code
ChartViewController *chartviewpage = [[ChartViewController alloc] initWithNibName:#"ChartViewController" bundle:nil];
[self.navigationController pushViewController:chartviewpage animated:YES];
//some code
}
I used to implement this code to another xib viewcontroller and it worked fine. But now not with the stroryboard viewcontroller.
However, I receive an exception as follows:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle (loaded)' with name 'ChartViewController''
* First throw call stack:
(0x15e6012 0x11b3e7e 0x15e5deb 0x53ffac 0x404e37 0x405418 0x405648 0x405882 0x405b2a 0x41cef5 0x41cfdb 0x41d286 0x41d381 0x41deab 0x41e4a3 0x41e098 0x4048 0x11c7705 0x327920 0x3278b8 0x3e8671 0x3e8bcf 0x3e86a6 0x43d597 0x43f83b 0x35716d 0x357552 0x3353aa 0x326cf8 0x22d1df9 0x22d1ad0 0x155bbf5 0x155b962 0x158cbb6 0x158bf44 0x158be1b 0x22d07e3 0x22d0668 0x32465c 0x1d0d 0x1c35)
libc++abi.dylib: terminate called throwing an exception
(lldb)
Can u help please?
Thanks very much!

I finally figured it out doing a bit more research. first, one needs to instantiate the controller (ChartViewcontroller) in the storyboard they are trying to transition to. Then you need to give a storyboard ID name (ChartID) to the controller which can be find under the file inspector after selecting the controller. Finally perform the push to the new controller.
Hope this helps someone.
UIStoryboard * myStoryboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
ChartViewController *chartpage = [myStoryboard instantiateViewControllerWithIdentifier:#"ChartID"];
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:chartpage animated:YES];

Related

Move to next view controller, i am using storyboard

Here is my code
RadarViewController *wc = [[RadarViewController alloc]
initWithNibName:#"RadarViewController"
bundle:nil];
[self.navigationController pushViewController:wc animated:YES];
Here is the error comes after crashing the app.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-10-14 12:25:02.596 Quick man help[890:60170] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/brainpulse/Library/Developer/CoreSimulator/Devices/0FD1A490-11AF-468D-96D3-71F37DDD8552/data/Containers/Bundle/Application/35FDBB50-E294-458B-B367-A57E3FC0B594/Quick man help.app> (loaded)' with name 'RadarViewController''
Your Xcode can not find a xib with name "RadarViewController" because you are using storyboard ....
You need to create instance of RadarViewController from storyboard like
UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
radarVC = [mystoryboard instantiateViewControllerWithIdentifier:#"radarVCID"];
You need to set radarVCID as storyboardID of RadarViewController in your storyboard
It seems that not all connections as parts of the archive has been already loaded from the storyboard at the moment you call initWithNibName as same as instantiateViewControllerWithIdentifier.
I suggest you to instatiate your view controller in viewDidLoad.
If it won't help, try to look if your storyboard is correct. To achieve this open it as a source code and look at opening/closing tags
After all of that, delete you view controller and re-add.Don't forget to create a copy of your storyboard before performing all of this.
Do something like below:
Select your RadarViewController in storyboard
In Identity Inspector, give RadarViewController identifier in Storyboard ID. for example "capture" as you can see in screenshot
Now write something like below:
RadarViewController *obj = [self.storyboard instantiateViewControllerWithIdentifier:#"youridentifier"];//youridentifier =capture as per screenshot. You can give whatever identifier to `RadarViewController`
[self.navigationController pushViewController:obj animated:YES];

push view controller by search button

i have Storyboard with UINavigationController i have created the first screen with searchbar
i have added second viewcontrol via IB to storyboard
how do i push the second viewcontroller to navigationcontroller ?
i have tried
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
ViewController *screen2 = [[ViewController alloc] initWithNibName:#"ViewController2" bundle:nil];
[self.navigationController pushViewController:screen2 animated:YES];
}
i have set Custom Class of second view controller to ViewController2
but when i run the app and click the search button in keyboard i get the following error
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle (loaded)' with name 'ViewController2''
The error you are getting is because Xcode cannot find the xib named ViewController2.
You may just call self.performSegueWithIdentifier(#"identifierToViewController")
But first make sure that your searchViewController is a child of an UINavigationController
Then make sure that the segue has a proper identifier:
First of all make sure that your second view controller class name is : ViewController2
After that in storyboard give your View Controller's class name and Storyboard Id as #"ViewController2", Please refer screen shot.
Actually you use wrong method to create instance of UIViewController as it is used when you use xib file.
Change your code like this :
ViewController2 *screen2 = [self.storyboard instantiateViewControllerWithIdentifier:#"ViewController2"];
[self.navigationController pushViewController:screen2 animated:YES];

Instantiating a view controller from another storyboard getting a key value coding-compliant error

I am attempting to add a UITableViewController subclass from another storyboard into the current on as one of the tab bar view controllers.
I am using the following code which is working for other view controllers.
UIViewController *vc;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
if (storyboard)
{
vc = [storyboard instantiateViewControllerWithIdentifier:#"ABCCustomViewControllerStoaryboardID"];
}
This gives me the following error:
* Terminating app due to uncaught exception
'NSUnknownKeyException', reason: '[
setValue:forUndefinedKey:]: this class is not key value
coding-compliant for the key fitnessStatusView.'
The fitnessStatusView is an outlet to a subview of one of the Static cells.
If I remove the outlet connection to this subview the problem goes away.
Is it not possible to connect a view in this way? It works fine when used in the storyboard that it is created in.
Any suggestions as to what I'm doing wrong here? Thanks.
Try this code :
UIStoryboard *loStoryboard ;
loStoryboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
This code for navigate from AppDelegate Class..
// Instantiate the initial view controller object from the storyboard
UIViewController *initialViewController = [loStoryboard instantiateInitialViewController];
// Instantiate a UIWindow object and initialize it with the screen size of the iOS device
self.view = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Set the initial view controller to be the root view controller of the window object
[self.navigationController pushViewController:initialViewController animated:YES];
This code for navigate from Tabbar Controller..
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:#"ABCCustomViewControllerStoaryboardID"];
[self.navigationController pushViewController:vc animated:YES];
Nope, you're not supposed to attach outlets from View Controllers to UITableViewCell subviews. Yes, I understand that the storboard allows it but it won't work in runtime as you (and I) have already found out.
I don't know why you need an outlet to a static cell subview though, because by definition, you shouldn't have to modify it because it's static.
If you really want an outlet to it, you can create a UITableViewCell subclass, assign it to the cell with the subview you want and then you can create the outlet from the subview in the storyboard to the UITableViewCell subclass. You can access the outlet in tableView:cellForRowAtIndexPath. Although that would make your table view dynamic. :)
I figured out the problem. It was related to the fact I testing another target and the table view subclass was not included in that target.
I must admit it would have been nice if I got a class not found error.

Unrecognized selector sent

I have 1 View Controller and 1 Tab Bar Controller with 2 Navegation Controller.
In my simple View I have one form and then when I click in button "Login" I want to load the first View in my Tab Bar Controller.
With this code works perfect:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
Inicial *telaInicial = [storyboard instantiateViewControllerWithIdentifier:#"tabBar"];
[self presentViewController:telaInicial animated:YES completion:nil];
But I want to send and value to this View "Inicial" and I put this:
telaInicial.email = email.text;
But I got this error message:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController setEmail:]: unrecognized selector sent to instance 0x9fdc8f0'
The object telaInicial that you think is an instance of Inicial is actually a UITabBarController therefore you cannot set the email property on it as it doesn't exist.
I think you want something like this...
UITabBarController *tabBarController = [self.storyboard instantiateViewControllerWithIdentifier:#"tabBar"];
UINavigationController *navController = tabBarController.viewControllers[0];
Inicial *telaInicial = navController.topViewController;
telaInicial.email = // blah
It means that there isn't a setEmail method for the telaInicial object. Is that an instance of a subclass you've written? If so, you might be getting the error because you haven't written a setEmail method for it or because you haven't declared the instance variable email as an #property, in which case the setter and getter methods for it would be synthesized automatically by XCode (prior to XCode 4.something, I think you need to synthesize your properties explicitly - after that version, they're automatic).
Try to write class, that will store your data.
You can access to it from AppDelegate (not really good solution, but very fast).

ios change view on button click

I am new in ios development i know pretty simple , i want to change view on button click
this is my code i create Tabbed Application ,storyboard flow is
TabView Controller-> Navigation Controller
->HomeViewController->Navigation Controller->ShopViewController
Code snippet:
#implementation HomeViewController
#synthesize users;
- (IBAction)shopButton:(id)sender {
NSLog(#"hi sachin");
NSLog(#"INSIDE Shops");
ShopViewController *cvc = [[ShopViewController alloc]initWithNibName:#"ShopViewController" bundle:nil];
[self.navigationController pushViewController:cvc animated:YES];
}
Its showing an error like this:
Pacific1[2556:70b] hi sachin
2014-02-25 16:34:49.374 Pacific1[2556:70b] INSIDE Shops
2014-02-25 16:34:49.632 Pacific1[2556:70b] *** Terminating app due to uncaught
exception 'NSInternalInconsistencyException', reason: 'Could not load
NIB in bundle: 'NSBundle (loaded)' with name 'ShopViewController''
If you are using a storyboard, you should instantiate your view controller using the instantiateViewControllerWithIdentifier method.
Example:
ShopViewController *viewController = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:#"ShopViewController"];
Make sure that the identifier is correct. It's under the Identity Inspector tab in Interface Builder. It's called Storyboard ID. You can give it any unique name that you want. Also make sure that story board name matches the name of your storyboard (without file extension).
Then:
[self.navigationController pushViewController:viewController animated:YES];
Your "ShopViewController" xib does not exists. See:
Terminating app due to uncaught
exception 'NSInternalInconsistencyException', reason: 'Could not load
NIB in bundle: 'NSBundle (loaded)' with name 'ShopViewController''
"Could not load
NIB in bundle"
If you're using storyboards you may want to instantiate the view like this:
ShopViewController *cvc = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:#"ShopViewController"];
Not 100% on that, but someone else may be able to point you in the right direction as I don't use storyboards.
ShopViewController *cvc = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:#"youstoryboardID"];
If still it,s not navigating than in story board select MainViewcontroller and click on Editor>Embed In in that select NavigationController.
I think it will work.

Resources