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 был корневым, как мне заставить его работать с несколькими основными и детальными схемами? Если это не сработает, как бы вы предложили мне исправить мой код выше, пожалуйста?

0 ответов

Другие вопросы по тегам