我有由 UINavigatableTextField 制成的字符框。每次输入后,响应者字符应该继承它的继任者。奇怪的是,在输入第一个字符期间,如果用户每次输入字符“Q”,都会出现不同的异常,例如;
- EXC_BAD_ACCESS,或
- 2012-09-04 14:42:42.600 Kelime Oyunu[6350:707]-[WebScriptObjectPrivate isForShortcutConversion]:无法识别的选择器发送到实例 0x21b870 2012-09-04 14:42:42.606 Kelime Oyunu[6350:707] *终止应用程序到期未捕获的异常“NSInvalidArgumentException”,原因:“-[WebScriptObjectPrivate isForShortcutConversion]:无法识别的选择器发送到实例 0x21b870”
被抛出。我的代码在下面收到异常,[next becomeFirstResponder] 行
- (void) moveToNextCharacter: (MBNavigatableTextField *) character
{
dispatch_async(dispatch_get_current_queue(),
^{
UIControl *next = [character nextField];
if(next == nil)
{
[character endEditing:YES];
}
else if ([next isKindOfClass:[UIButton class]])
{
[next sendActionsForControlEvents: UIControlEventTouchUpInside];
}
else
{
[next becomeFirstResponder];
}
});
}
我该如何解决这个问题?提前致谢。
编辑 1:找到一个僵尸 [next resignFirstResponder](感谢@PhillipMills)
编辑2:原来我的问题是由
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// Something done here...
// code block of evil zombie summoner
[textField setText:@"Some text"];
// Something else done here
}
Profile->Instruments->Zombies 说明在 setText 期间:某个对象被释放(我猜这是之前的字符串)。
我仍然无法解决问题。我的目标是用新的用户输入(replacementString :) 更新上面的 textField。