当我运行Build& amp时,我没有得到任何编译时错误,也没有出现任何问题。分析。但是在运行时,当我点击uitextfield时,我的应用程序崩溃了。
-[__NSCFType textFieldDidBeginEditing:]: unrecognized selector sent to instance 0x583cb90
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType textFieldDidBeginEditing:]: unrecognized selector sent to instance 0x583cb90'
0 CoreFoundation 0x00fa25a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x010f6313 objc_exception_throw + 44
2 CoreFoundation 0x00fa40bb -[NSObject(NSObject)doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00f13966 ___forwarding___ + 966
4 CoreFoundation 0x00f13522 _CF_forwarding_prep_0 + 50
5 UIKit 0x00394581 -[UIControl(Deprecated) sendAction:toTarget:forEvent:] + 67
6 UIKit 0x00396e62 -[UIControl(Internal) _sendActionsForEventMask:withEvent:] +
7 UIKit 0x0039ce11 -[UITextField willAttachFieldEditor:] + 404
8 UIKit 0x003aecdf -[UIFieldEditor becomeFieldEditorForView:] + 653
9 UIKit 0x0039ef98 -[UITextField _becomeFirstResponder] + 99
答案 0 :(得分:1)
在Interface Builder中(或者可能在代码中,但更可能是IB),您可以将“Editing Did Begin”发送事件链接到代码中不存在的方法;也许它被重命名,或者你可能在删除动作后忽略删除该链接。
当你在textField中开始编辑时,app会尝试调用IB中指示的方法并失败; “无法识别的选择器”表示它无法识别该名称的方法。
要么删除链接,要么删除它,并用适当的链接替换它。
答案 1 :(得分:1)
您可能没有正确保留您指定为UITextField代理的对象(例如,您没有将其分配给IB中声明为retain
的outlet属性),或者您正在调用{{ 1}}或release
在您不拥有或保存为ivar的对象上。
最终会丢弃对象,稍后会在同一内存位置创建不同的对象。但是,该对象当然没有实现UITextFieldDelegate协议,因此当文本字段尝试向其发送委托消息时,它会为您提供该错误。如果不在同一个内存位置创建对象,则会发生EXC_BAD_ACCESS崩溃。