我有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;
答案 0 :(得分:0)
似乎user_login
指向的文本字段已被释放。 user_login
是unsafe_unretained
属性吗?
EXC_BAD_ACCESS通常是一个对象被解除分配并在之后发送消息的结果。您可以通过启用僵尸来了解有关错误的更多信息:
在Xcode的方案编辑器中切换到Diagnostics选项卡并选中“Enable Zombie Objects”。
答案 1 :(得分:0)
问题是由DAKeyboardControl
库引起的。我在我的一个View Controllers中使用它,我忘了这样做:
-(void) viewDidDisappear:(BOOL)animated
{
[self.view removeKeyboardControl];
}
DAKeyboardControl
订阅键盘NSNotifications - 需要通过上述方法删除它。