В основном, когда я реализую разделенное представление, подобное тому, которое представлено в примере Apple «MultipleDetailsViews», все работает нормально, оно выделяет новое подробное представление каждый раз, когда выбирается строка.Вот соответствующий код из примера:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController <SubstitutableDetailViewController> *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;
// ...
}
Но то, что я ищу, - это повторное использование детализированных контроллеров представления, которые лениво выделяют контроллер представления, когда он выбран, и сохраняют ссылку на него вмой объектТаким образом, когда выбирается другая строка, контроллер представления не освобождается, а при повторном выборе он будет использоваться повторно вместо выделения новой.Вот соответствующий код:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController <SubstitutableDetailViewController> *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;
// ...
}
self.firstDetailViewController
запускается при первом выборе первой строки, а затем используется повторно.
Когда я это делаю, это хорошо работает в альбомной ориентациино в портретном режиме после нескольких щелчков во всплывающем меню возникает исключение: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'
Так почему меня это волнует?и почему я не хочу перераспределять контроллеры представления?потому что в некоторых из них я хочу выполнять задачи, которые не будут прерваны (убиты), если пользователь перейдет в новом подробном представлении, пока задача еще не завершена.
Есть ли кто-то с идеейчто происходит или с работающей реализацией того, чего я пытаюсь достичь?