UISplitViewController设置viewControllers第二次崩溃

时间:2012-03-19 23:31:55

标签: objective-c ios cocoa-touch uisplitviewcontroller automatic-ref-counting

我在UISplitViewController上使用ARC

我在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有关吗?

Stacktrace:

enter image description here

1 个答案:

答案 0 :(得分:8)

我刚才遇到了同样的错误。在我的情况下,问题是我最初设置详细视图控制器是UISplitViewController的委托。然后我重构使根视图控制器处理事情,但我忘了从.xib文件中删除连接。

所以,当我第一次设置splitView.viewControllers时,一切都有效,但是我的原始细节控制器会被释放,而UISplitViewController会留下一个错误的指针delegate。下次我设置viewControllers属性时,UISplitViewController试图通过指针调用其委托并崩溃。

您写道,您在应用代理中设置了控制器,因此这可能与您遇到的问题完全不同。不过,请仔细检查以确保delegate的{​​{1}}属性设置正确!