2013-09-26 63 views
0

我有一个类似Notes的应用程序:UITableViewController通过将它们推送到导航堆栈上来显示各个注释。ios7导航栏导致EXC_BAD_ACCESS在VC显示键盘后退出

的问题出现时,我有UITextView与FirstResponder状态(键盘显示)和我触摸后退按钮。当前的视图控制器与预期的动画一样被解散,但是导航栏现在被破坏了!如果我按任何一个栏按钮,它将导致EXC_BAD_ACCESS。

我会说它没有正确过渡。表格VC也以某种方式被打破,因为它可能在进一步的操作中显示为空......非常奇怪的行为!

顺便说一下,它并没有导致iOS5和iOS6的任何问题,但在那里我使用了自定义V形背部按钮。

我检查了标准的Notes应用程序,它的作用就像一个魅力。 有什么窍门?

非常感谢您的建议!

+0

请考虑发布一些代码以及崩溃日志。 – null

+0

经过一些跟踪之后,我发现UITableViewController的viewWillAppear:和viewDidAppear:方法在使用活动键盘回到它之后不会触发。为什么会这样? –

+0

毫米,确实设置了导航控制器代理? – null

回答

0

我得到了它,并会尽量解释,以帮助别人来拯救他们的一天......

EXC_BAD_ACCESS有人提出,因为UITableViewController没有正确返回弹出动画过程中转变为(其viewWillAppear:viewDidAppear:方法不根本触发)。 反过来,由于popViewControllerAnimated:被调用了两次或更多次,动画未正确执行:1)作为系统后退按钮回调的一部分; 2)在textViewDidEndEditing:之内,以防输入文本。

解决的办法是检查是否后退按钮具有呼叫popViewControllerAnimated:之前被按下。诀窍是检查detail-view控制器是否仍在导航堆栈中。 这里是辅助方法:在iOS7

-(void) returnToTheListOfRecords { 
    self.textView.delegate = nil; // this is to avoid the second call of `textViewDidEndEditing:` 
    if ([self.navigationController.viewControllers indexOfObject:self.delegate]==NSNotFound) { 
     // Back button has been pressed. 
    } else { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

发生该问题不仅是因为它全新的动画。

0

EXC_BAD_ACCESS表示您试图访问已被释放的对象。你可以做的最好的事情来追踪这是NSZombie,它会告诉你什么发布的对象正在发送一条消息(又名EXC_BAD_ACCESS)。

你可以从here得到如何启用它。

+0

我明白为什么会引发EXC_BAD_ACCESS并导致它,正如我在前面评论中所说的。 'popViewControllerAnimated:'被调用两次(从系统和'textViewDidEndEditing:'返回按钮)。我只是不知道如何正确处理它,如何检查后退按钮动画是否正在进行中... –

+0

尝试[textView resignFirstResponder];在viewWillDisapear中,如果没有任何事情发生,请编辑您的问题并发布您的代码。 – null

+0

不幸的是,它没有帮助。但我找到了解决方案!我会回答我的问题。非常感谢您的建议。 –