iOS:奇怪的EXC_BAD_ACCESS与2个模态viewControllers

时间:2014-02-26 12:30:34

标签: ios objective-c

我有2个模态viewControllers:1)过滤器 2)登录

SignInviewController 中,我有一个user_login textField,它自动变为活动状态(显示键盘):

-(void)viewDidLayoutSubviews
{
    [self.user_login becomeFirstResponder];
}

如果我先打开 SignInviewController ,一切正常,键盘显示,我可以登录。

但是如果我先打开模态 FilterviewController ,更改过滤器设置,点击“完成”,然后打开 SignInviewController - 当iOS尝试显示键盘时,我得到EXC_BAD_ACCESS

SignInviewController & FilterviewController 彼此之间没有连接 - 完全独立 - 所以我无法理解 FilterviewController 如何导致 SignInviewController 崩溃。

更新

Xcode以绿色突出显示[self.user_login becomeFirstResponder];行并注意:Thread 1: EXC_BAD_ACCESS (code=1 address=0xb1057169)

UPDATE-2

刚注意到另外一件导致同样错误的事情。如果我打开模态过滤器,单击任何textField(键盘显示),然后单击“完成”(过滤器关闭),然后再次打开过滤器并再次单击textField,我得到相同的EXC_BAD_ACCESS。

UPDATE-3

USER_LOGIN:

@property (strong) IBOutlet UITextField *user_login;

2 个答案:

答案 0 :(得分:0)

似乎user_login指向的文本字段已被释放。 user_loginunsafe_unretained属性吗?

EXC_BAD_ACCESS通常是一个对象被解除分配并在之后发送消息的结果。您可以通过启用僵尸来了解有关错误的更多信息:

在Xcode的方案编辑器中切换到Diagnostics选项卡并选中“Enable Zombie Objects”。

答案 1 :(得分:0)

问题是由DAKeyboardControl库引起的。我在我的一个View Controllers中使用它,我忘了这样做:

-(void) viewDidDisappear:(BOOL)animated
{
    [self.view removeKeyboardControl];
}

DAKeyboardControl订阅键盘NSNotifications - 需要通过上述方法删除它。