EXC_BAD_ACCESS 关闭 UIViewController 时崩溃
EXC_BAD_ACCESS crash upon dismissing UIViewController
我有两个按钮触发转至两个不同的 UIViewCONtroller,使用此代码:
- (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!
我在每个视图控制器上都有一个保存和一个取消导航栏按钮。除了上面提到的以外,一切都按预期工作,除了 newTransSegue
处视图控制器上的取消按钮,它关闭了 VC,但应用程序崩溃并出现此错误:
EXC_BAD_ACCESS (code = 1, address = 0x7f87394af29)
这是我用来消除 VC:
的委托方法
-(void)addTransactionViewControllerDidCancel
{
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
我已经做了几天,并尝试删除转场并在情节提要中重新创建它们,并对导航控制器执行相同的操作。我离开了 rails 某处,但看不到确切位置。
我当然可以使用一些指导。 :)
好的,学习了@Jay好心提供的参考资料。原来我以前见过它,但只看过第 1 部分。在第 2 部分中,我发现了一个对启用僵尸对象的引用,我确实这样做了。现在,当应用程序崩溃时,我收到了这条消息:[_UILayoutGuide isDescendantOfView:],它指出了 Storyboard 中的一个问题。
检查 Storyboard 后,我惊讶地发现,所讨论的视图控制器的表示形式与周围的视图控制器不同。我希望我做了一个屏幕截图,但在激烈的狩猎中,我没有。
无论如何,进一步的研究出现了 this question (and its associated comments)。我的调查显示,虽然我启用了 Size 类,但出于某种我无法解释的原因,Simulated Metrics 下相关 View Controller 的大小已设置为 "Freeform." 我将其重置为 "Inferred" 现在一切似乎都在正常运行——没有崩溃。希望我能详细解释一下,但我对结果很满意!
我有两个按钮触发转至两个不同的 UIViewCONtroller,使用此代码:
- (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!
我在每个视图控制器上都有一个保存和一个取消导航栏按钮。除了上面提到的以外,一切都按预期工作,除了 newTransSegue
处视图控制器上的取消按钮,它关闭了 VC,但应用程序崩溃并出现此错误:
EXC_BAD_ACCESS (code = 1, address = 0x7f87394af29)
这是我用来消除 VC:
的委托方法-(void)addTransactionViewControllerDidCancel
{
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
我已经做了几天,并尝试删除转场并在情节提要中重新创建它们,并对导航控制器执行相同的操作。我离开了 rails 某处,但看不到确切位置。
我当然可以使用一些指导。 :)
好的,学习了@Jay好心提供的参考资料。原来我以前见过它,但只看过第 1 部分。在第 2 部分中,我发现了一个对启用僵尸对象的引用,我确实这样做了。现在,当应用程序崩溃时,我收到了这条消息:[_UILayoutGuide isDescendantOfView:],它指出了 Storyboard 中的一个问题。
检查 Storyboard 后,我惊讶地发现,所讨论的视图控制器的表示形式与周围的视图控制器不同。我希望我做了一个屏幕截图,但在激烈的狩猎中,我没有。
无论如何,进一步的研究出现了 this question (and its associated comments)。我的调查显示,虽然我启用了 Size 类,但出于某种我无法解释的原因,Simulated Metrics 下相关 View Controller 的大小已设置为 "Freeform." 我将其重置为 "Inferred" 现在一切似乎都在正常运行——没有崩溃。希望我能详细解释一下,但我对结果很满意!