UISplitViewController第二次崩溃设置viewControllers

问题描述:

我在ARC上使用UISplitViewControllerUISplitViewController第二次崩溃设置viewControllers

我在我的AppDelegate中设置控制器,然后将其设置为rootViewController。我已经确定,使之成为property

@property (strong, nonatomic) UISplitViewController *splitViewController; 

使用viewControllers属性设置根和细节工作正常时,首先创建。再次设置时,它会再次正常工作,但我第三次尝试设置viewControllers属性时发生崩溃。

这是我如何设置这些:

Screens *edit = [[Screens alloc] initWithStyle:UITableViewStyleGrouped]; 
    UINavigationController *c = [[UINavigationController alloc] initWithRootViewController:edit]; 

    if ([Utility isIpad]) { 
     Map *a = (Map *)[[MyAppDelegate instance].splitViewController.viewControllers objectAtIndex:0]; 
     NSArray *viewControllers = [NSArray arrayWithObjects:a, c, nil]; 
     UISplitViewController *splitView = [MyAppDelegate instance].splitViewController; 
     splitView.viewControllers = viewControllers;// <--- Crashes here 
    } else { 
     [self presentModalViewController:c animated:YES]; 
    }//end 

为什么它会崩溃,当我尝试设置viewControllers财产?它几乎看起来像它被释放,但我知道,splitViewController仍然存在...

这可能是与ARC有关吗?

堆栈跟踪:

enter image description here

+0

什么是它的崩溃回溯?另外,怀疑它与ARC有关。 – mattjgalloway 2012-03-28 22:08:39

+0

好吧,愚蠢的问题。我如何看到回溯?我只有在Debug Navigator中有什么。 – 2012-03-29 00:31:34

+0

在调试导航器中应该有回溯。底部有一个滑块,如果您一直滑到右侧,您将获得完整的回溯。 – mattjgalloway 2012-03-29 08:00:52

刚才我同样的错误。在我的情况下,问题在于我最初将详细视图控制器设置为UISplitViewController的代表。然后我重构,使根视图控制器处理的东西,但我忘了从.xib文件中删除连接。

所以,当我第一次设置splitView.viewControllers一切正常,但我的原始细节控制器将被释放,UISplitViewController留下一个不好的指针作为delegate。下次我设置viewControllers属性时,UISplitViewController试图通过指针调用其委托并崩溃。

你写道,你在你的应用程序委托中设置了控制器,所以这可能不是完全相同的问题。不过,请仔细检查以确保UISplitViewControllerdelegate属性设置正确!

+0

+1。我的应用因此而崩溃,我刚刚花了最近三个小时试图弄清楚这一点。你救了我,谁知道多少悲伤! – Julian 2012-06-19 02:19:32

+0

谢谢!我很高兴我能回馈一些东西 - Stack Overflow为我节省了几周的调试痛苦:)。 – 2012-08-24 17:43:11

+0

+1清楚的答案 – amcc 2012-11-01 00:05:55