0

我有一个类似笔记的应用程序:UITableViewController通过将单个笔记推送到导航堆栈来显示它们。

当我UITextView处于 FirstResponder 状态(显示键盘)并且我触摸后退按钮时,就会出现问题。当前视图控制器与预期的动画一样被解除,但导航栏现在坏了!如果我按下任何条形按钮,它将导致 EXC_BAD_ACCESS。

我会说它没有正确过渡。表 VC 也以某种方式损坏了,因为在进一步的操作中它可能看起来是空的......非常奇怪的行为!

顺便说一句,它不会对 iOS5 和 iOS6 造成任何问题,但我使用了自定义的 V 形返回按钮。

我检查了标准的笔记应用程序,它就像一个魅力。诀窍是什么?

非常感谢您的建议!

4

2 回答 2

0

EXC_BAD_ACCESS表示您正在尝试访问已被释放的对象。您可以做的最好的事情是启用 NSZombie,它会告诉您正在向哪个已发布对象发送消息(又名 EXC_BAD_ACCESS)。

您可以从这里了解如何启用它。

于 2013-09-26T21:05:35.430 回答
0

我明白了,并会尝试解释以帮助其他人挽救他们的一天......

EXC_BAD_ACCESS 被引发是因为UITableViewController在 Back pop-animation 期间没有正确转换(它viewWillAppear:viewDidAppear:方法根本没有被触发)。反过来,动画没有正确执行,因为popViewControllerAnimated:被调用了两次甚至更多次:1)作为系统后退按钮回调的一部分;2)textViewDidEndEditing:在没有输入文本的情况下。

解决方法是在调用之前检查是否按下了返回按钮popViewControllerAnimated:。诀窍是检查详细视图控制器是否仍在导航堆栈中。这是辅助方法:

-(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];
    }
}

这个问题发生在 iOS7 上只是因为它的全新动画。

于 2013-09-27T14:16:38.397 回答