Note that there are some explanatory texts on larger screens.

plurals
  1. POLoad already initialized DetailViewControllers in Apples MultipleDetailViews Example
    text
    copied!<p>Apple presents on their iOS Development sites an example on how to use a splitview with different detailviews (<a href="http://developer.apple.com/library/ios/#samplecode/MultipleDetailViews/Introduction/Intro.html" rel="nofollow">see MultipleDetailViews Example</a>). In the RootViewController eery time the cell gets selected, a new DetailViewController is initialized:</p> <pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { /* Create and configure a new detail view controller appropriate for the selection. */ NSUInteger row = indexPath.row; UIViewController &lt;SubstitutableDetailViewController&gt; *detailViewController = nil; if (row == 0) { FirstDetailViewController *newDetailViewController = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil]; detailViewController = newDetailViewController; } if (row == 1) { SecondDetailViewController *newDetailViewController = [[SecondDetailViewController alloc] initWithNibName:@"SecondDetailView" bundle:nil]; detailViewController = newDetailViewController; } // Update the split view controller's view controllers array. NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil]; splitViewController.viewControllers = viewControllers; [viewControllers release]; // Dismiss the popover if it's present. if (popoverController != nil) { [popoverController dismissPopoverAnimated:YES]; } // Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created). if (rootPopoverButtonItem != nil) { [detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem]; } [detailViewController release]; } </code></pre> <p>Now my idea is instead of initialising the viewcontrollers everytime, just initialize the controllers in the viewDidLoad (and also header) and pass the references of them when the cell gets selected:</p> <p>part of the viewDidLoad in the rootviewcontroller:</p> <pre><code>firstDetailViewController = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil]; secondDetailViewController = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil]; </code></pre> <p>Now the tableView didselectrow method looks like this:</p> <pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { /* Create and configure a new detail view controller appropriate for the selection. */ NSUInteger row = indexPath.row; UIViewController &lt;SubstitutableDetailViewController&gt; *detailViewController = nil; if (row == 0) { detailViewController = firstDetailViewController; } if (row == 1) { detailViewController = secondDetailViewController; } // Update the split view controller's view controllers array. NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil]; splitViewController.viewControllers = viewControllers; [viewControllers release]; // Dismiss the popover if it's present. if (popoverController != nil) { [popoverController dismissPopoverAnimated:YES]; } // Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created). if (rootPopoverButtonItem != nil) { [detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem]; } //[detailViewController release]; } </code></pre> <p>In landscape mode everything works fine, but when in portrait mode a get an error, when switching from the firstdetailviewcontroller, to the second, then to the first and then want to switch to the second. Following message occurs: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'</p> <p>Since yesterday evening I am trying to figure this out, but i do not find a solution. Anybody an idea?</p> <p>Cheers, Dominik</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload