在 MGSplitViewController 上呈现表单时随机崩溃

Posted

技术标签:

【中文标题】在 MGSplitViewController 上呈现表单时随机崩溃【英文标题】:Random crash on presenting formsheet over MGSplitViewController 【发布时间】:2012-08-05 11:54:42 【问题描述】:

我在我的应用程序中使用 MGSplitViewController。 从一个视图控制器中,单击按钮时,我已将控件导航到这两种方法,其中 Formsheet 将以 MGSplitViewController 的背景打开(显示主视图和详细视图。)

这些方法效果很好,我得到了所需的结果,但是经过多次操作后,应用程序在这一点上崩溃而没有打印任何日志。谁能建议我一些解决方案?

-(void)launchSplitViewWithFormSheet :(MGSplitViewController *)mGSplitViewController

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mGSplitViewController];
    [self.baseNavigationController setViewControllers:[NSArray arrayWithObject:navController]]; 
    [self openFormSheet:mGSplitViewController];


-(void)openFormSheet:(MGSplitViewController *)mGSplitViewController

    DetailViewController *detailViewController = (DetailViewController *)[mGSplitViewController.viewControllers objectAtIndex:0];
    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];

    UINavigationController *baseNavController = [[UINavigationController alloc]initWithRootViewController:masterViewController];
    detailViewController.masterViewController = detailViewController;

    baseNavController.modalPresentationStyle = UIModalPresentationFormSheet;
    [mGSplitViewController presentModalViewController:baseNavController animated:YES];    

【问题讨论】:

【参考方案1】:

我自己得到了答案。而不是

[self openFormSheet:mGSplitViewController];

我用线程调用了函数

    [self performSelectorOnMainThread:@selector(openPurpose:) withObject:mGSplitViewController waitUntilDone:YES];

而且我不会随机崩溃。 :)

【讨论】:

【参考方案2】:

您在代码中多次调用alloc,但没有在任何地方调用releaseautorelease。每个内存分配都必须通过内存释放来平衡。如果您不这样做,您的应用程序将泄漏内存并最终崩溃。请阅读the memory management section of Cocoa Core Competencies。

【讨论】:

嗨,吉姆,感谢您的回复。我释放了每个分配的对象。仍然面临同样的问题。

以上是关于在 MGSplitViewController 上呈现表单时随机崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS8 MGSplitViewController 替代品

MGSplitViewController 与所有 github 补丁?

在 UISplitViewController 中隐藏 MasterView

嵌套的拆分视图控制器

使用 MGSplitView 控制器更改视图

电脑上GetTickCount64在哪里