解雇UIViewController后EXC_BAD_ACCESS崩溃

时间:2015-03-29 20:13:25

标签: ios uiviewcontroller uinavigationcontroller uistoryboardsegue

我有两个按钮触发两个不同的UIViewCO控制器的segue,使用此代码:

- (IBAction)newTransButton:(UIButton *)sender
{
    [self performSegueWithIdentifier:@"newTransSegue" sender:self];
}

- (IBAction)switchAccountButton:(UIButton *)sender
{
    [self performSegueWithIdentifier:@"selectAccountSegue" sender:self];
}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];

    if ([[segue identifier] isEqualToString:@"newTransSegue"])
    {
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        AddTransactionVC *atvc = (AddTransactionVC *)navController.topViewController;
        atvc.delegate = self;

        WMMGTransaction *addedTransaction = (WMMGTransaction *)[WMMGTransaction MR_createInContext:localContext];

        addedTransaction.account = self.currentAccount.name;
        atvc.thisTransaction = addedTransaction;
    }

    else if ([[segue identifier] isEqualToString:@"selectAccountSegue"])
    {
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        AccountSelectVC *acctSelVC = (AccountSelectVC *)navController.topViewController;
        acctSelVC.delegate = self;
    }
}

激活任一按钮都会转到相应的视图控制器,但会出现此警告:

Warning: Attempt to present <UINavigationController: 0x7fb99b4dd430> on <FirstViewController: 0x7fb99b565dd0> whose view is not in the window hierarchy!

我在每个View控制器上都有一个Save和一个Cancel Navigation栏按钮。除了上面提到的以外,一切都按预期工作,除了newTransSegue上的View控制器上的取消按钮,它取消了VC,但崩溃了应用程序时出现此错误:

EXC_BAD_ACCESS (code = 1, address = 0x7f87394af29)

这是我用来解雇VC的委托方法:

-(void)addTransactionViewControllerDidCancel
{
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}

我已经在这里工作了几天,并试图删除segue并在故事板中重新创建它们,以及为导航控制器做同样的事情。我已经离开了某个地方,但是看不清楚到底在哪里。

我确定可以使用一些指导。 :)

1 个答案:

答案 0 :(得分:2)

好的,我研究了@Jay提供的参考资料。事实证明我以前见过它,但只有第1部分。在第2部分中,我发现了一个启用Zombie Objects的引用,我做了。现在,当应用程序崩溃时,我收到了以下消息:[_ UILayoutGuide isDescendantOfView:],它指出了故事板中的一个问题。

在检查故事板后,我发现,令人惊讶的是,所讨论的视图控制器的表示形式与周围的视图控制器的形状不同。我希望我做了一个截图,但在狩猎的热度,我没有。

无论如何,进一步的研究出现了this question (and its associated comments)。我的调查显示,虽然我启用了大小类,但由于某些原因我无法解释,模拟度量下的相关视图控制器的大小已设置为“自由格式”。我将其重置为“推断”并且现在看起来正常运行 - 没有崩溃。希望我能详细解释一下,但我对结果感到满意!