拆分视图控制器不是根控制器

时间:2013-11-17 15:54:02

标签: ios iphone memory-leaks uisplitviewcontroller uisplitview

我一直致力于将现有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是根,我如何使它与多个主 - 细节安排一起工作?如果这不起作用,你会建议我理顺上面的代码吗?

0 个答案:

没有答案