I am desperately trying for 2h now to find a bug in my code, that is responsible for not showing my SplitViewController I have implemented. The strange thing is, that no compile error is being shown and that all links and dependencies seem to be correct.
There is nothing showing up on the screen on first load. But when I rotate the device, I see the correct view. But when firing up there is no view at all, even though all view are connected.
I just got part of it working... I found out with the debugger, that the first view controller is not loaded at start up. So the view controllers array for the split view its not filled with a initial view controller... how can I fix that?
The first part I checked was my AppDelegate:
#import "AppDelegate.h"
#import "RootViewController.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize splitViewController = _splitViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
[[self window] addSubview:self.splitViewController.view];
[self.window makeKeyAndVisible];
return YES;
}
@end
The First View Controller
#import "FirstViewController.h"
@implementation FirstViewController
@synthesize toolbar;
#pragma mark -
#pragma mark View Lifecycle
- (void)viewDidUnload
{
[super viewDidUnload];
self.toolbar = nil;
}
#pragma mark -
#pragma mark Managing the Popover
- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem
{
NSMutableArray *itemsArray = [toolbar.items mutableCopy];
[itemsArray insertObject:barButtonItem atIndex:0];
[toolbar setItems:itemsArray animated:NO];
}
- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem
{
NSMutableArray *itemsArray = [toolbar.items mutableCopy];
[itemsArray removeObject:barButtonItem];
[toolbar setItems:itemsArray animated:NO];
}
#pragma mark -
#pragma mark Rotation support
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end
The second part I checked was my RootViewController. The thing is, when you click on a tableView Entry a new view controller shall be loaded and being shown. So I don't instantiate the VCs in my app Delegate but in the "did select row" table view delegate method.
This is the rootviewcontroller:
#import "RootViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
@implementation RootViewController
@synthesize popoverController, splitViewController, rootPopoverButtonItem;
#pragma mark -
#pragma mark View Lifecycle
- (void)viewDidLoad
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
[super viewDidLoad];
self.contentSizeForViewInPopover = CGSizeMake(310.0, self.tableView.rowHeight * 2.0);
}
- (void)viewDidUnload
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
[super viewDidUnload];
self.splitViewController = nil;
self.rootPopoverButtonItem = nil;
}
#pragma mark -
#pragma mark Rotation support
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
return YES;
}
#pragma mark -
#pragma mark SplitViewController delegates
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
barButtonItem.title = @"PolyCube Prototypes";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];
}
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
self.popoverController = nil;
self.rootPopoverButtonItem = nil;
UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
[detailViewController invalidateRootPopoverButtonItem:rootPopoverButtonItem];
}
#pragma mark -
#pragma mark Table View Data Source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
static NSString *CellIdentifier = @"RootViewControllerIdentifier";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (indexPath.row == 0) {
cell.textLabel.text = @"PolyCube 1";
}
else {
cell.textLabel.text = @"PolyCube 2";
}
return cell;
}
#pragma mark -
#pragma mark - Table View Selection
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%s %d", __PRETTY_FUNCTION__, __LINE__);
NSUInteger row = indexPath.row;
UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
if (row == 0) {
FirstViewController *newDetailViewController = [[FirstViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil];
detailViewController = newDetailViewController;
}
if (row == 1) {
SecondViewController *newDetailViewController = [[SecondViewController alloc] initWithNibName:@"SecondDetailView" bundle:nil];
detailViewController = newDetailViewController;
}
NSArray *vcs = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
splitViewController.viewControllers = vcs;
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
if (rootPopoverButtonItem != nil) {
[detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];
}
}
@end
I would really appreciate a helping hand... I don't know where to look anymore. I even checked all IB connections... nothing wrong I think. But still only a white screen.
Thank you so much Sebastian