Split View Controller не является корневым контроллером
Я работал над методом преобразования существующего приложения для iPhone в приложение для iPad. Среди различных проблем, с которыми я сталкиваюсь, я пытаюсь отобразить UISplitViewController в приложении, чтобы отобразить расположение Master - Detail, которое существует в приложении iPhone.
Я рассмотрел вопрос о том, чтобы заменить корневой контроллер на SplitViewController, как предлагает Apple, но у меня есть несколько схем master - Detail в приложении, и Apple не объясняет, как создать такую схему с одним SplitViewController в качестве корневого (они объясняют, как получить несколько подробных видов для одного мастера, но это что-то другое).
Чтобы достичь своей цели, я сделал следующее: в моем представлении, содержащем мое главное меню (моя первая страница), я загружаю UISplitViewController нажатием кнопки следующим образом:
-(void)showSplitViewController
{
UIStoryboard *myStoryboard = self.storyboard;
UISplitViewController *splitViewController =(UISplitViewController *)[myStoryboard instantiateViewControllerWithIdentifier:@"SplitViewController"];
// Detail
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
DetailedViewController *detailViewController = (DetailedViewController *)navigationController.topViewController;
splitViewController.delegate = detailViewController;
detailViewController.managedObjectContext = self.managedObjectContext;
// Master
UINavigationController *masterNavigationController = splitViewController.viewControllers[0];
MasterViewController *controller = (MasterViewController *)masterNavigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.window setRootViewController:splitViewController];
self.navigationController.viewControllers = nil;
}
Это показывает UISplitViewController и все хорошо.
В подробном представлении сплит-контроллера у меня есть кнопка "Домой", которая возвращает вас на целевую страницу (та, на которой кнопка вызывает код выше). Этот код выглядит так:
-(void)goHome
{
// Return to the root view.
AppDelegate *appDelegate = [AppDelegate sharedAppDelegate];
// Create the Home View Controller
UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard-iPad" bundle:nil];
HomeViewController *hvc = (HomeViewController*)[myStoryboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
hvc.managedObjectContext = self.managedObjectContext;
// Create the Navigation controller
UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:hvc];
// Remove the current root view controller
[self.view.window setRootViewController:navigationController];
//[navigationController presentViewController:hvc animated:YES completion:nil];
UIViewController *currentViewController = [navigationController presentedViewController];
}
Проблема в том, что при этом возникает утечка памяти, которую я не могу отследить. Если вы неоднократно переключаетесь из Home View в Split View и обратно, потребление памяти просто продолжает расти. Я думаю, что представление или что-то не высвобождается правильно, но я не могу отследить его.
Кто-нибудь есть какие-либо предложения о том, что я могу сделать, пожалуйста?
Если я изменю весь свой код так, чтобы UISplitViewController был корневым, как мне заставить его работать с несколькими основными и детальными схемами? Если это не сработает, как бы вы предложили мне исправить мой код выше, пожалуйста?