我一直致力于将现有iPhone应用转换为iPad应用的方法。在我遇到的各种挑战中,我试图在应用程序中显示一个UISplitViewController,以显示iPhone应用程序中存在的主 - 细节排列。
我已经考虑将根控制器更改为SplitViewController,正如Apple建议的那样,但是我在应用程序中有多个master-Detail安排,Apple没有解释如何只使用一个SplitViewController作为根(他们确实解释了)如何为一个Master提供多个Detail视图,但这是不同的。)
为实现我的目标,我做了以下工作: 在包含我的主菜单(我的第一页)的视图中,我按以下方式按下按钮加载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是根,我如何使它与多个主 - 细节安排一起工作?如果这不起作用,你会建议我理顺上面的代码吗?