Note that there are some explanatory texts on larger screens.

plurals
  1. POReusing detailed view controller in UISplitViewController
    text
    copied!<p>Basically when I implement a split view like the one presented in the Apple example 'MultipleDetailsViews', everything works fine, it allocates a new detailed view each time a row is selected. Here is the relevant code from the example:</p> <pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController &lt;SubstitutableDetailViewController&gt; *detailViewController = nil; if (row == 0) { FirstDetailViewController *newDetailViewController = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil]; detailViewController = newDetailViewController; } // ... NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil]; splitViewController.viewControllers = viewControllers; // ... } </code></pre> <p>But what I'm looking for is reusing detailed view controllers, that is lazily allocating a view controller when it is selected, and keeping a reference on it in my object. That way when another row is selected the view controller is not deallocated and when it is selected again it would be reused instead of allocating a new one. Here is the relevant code:</p> <pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController &lt;SubstitutableDetailViewController&gt; *detailViewController = nil; if (row == 0) { if (self.firstDetailViewController == nil) { FirstDetailViewController *newDetailViewController = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil]; self.firstDetailViewController = newDetailViewController; [newDetailViewController release]; } detailViewController = self.firstDetailViewController; } // ... NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil]; splitViewController.viewControllers = viewControllers; // ... } </code></pre> <p><code>self.firstDetailViewController</code> is instanciated the first time the first row is selected then it is reused.</p> <p>When I'm doing that it works well in landscape mode but in portrait mode after a few clicks in the popover menu it raises an exception: <code>*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'</code></p> <p>So why I care? and why I don't want to reallocate view controllers? because in some of them I want to perform tasks that wouldn't be interrupted (killed) if the user navigate in a new detailed view while the task isn't completed yet.</p> <p>Is there someone with an idea of what happens or with a working implementation of what I'm trying to achieve?</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