0

我一直在研究一种将现有 iPhone 应用程序转换为 iPad 应用程序的方法。在随之而来的各种挑战中,我试图在应用程序中显示 UISplitViewController 以显示 iPhone 应用程序中存在的主 - 详细信息排列。

我已经考虑将根控制器更改为 Apple 建议的 SplitViewController,但我在应用程序中有多个主 - 详细安排,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];
}

问题是这样做会产生内存泄漏,我没有能力追踪。如果您反复从主视图切换到拆分视图并再次返回,则内存消耗只会不断攀升。我认为某个视图或某些内容没有正确发布,但我无法追踪它。

有人对我能做什么有任何建议吗?

如果我更改所有代码以使 UISplitViewController 成为根,我如何使其与多个主 - 细节安排一起使用?如果这不起作用,你会如何建议我整理上面的代码?

4

0 回答 0