Ios F在Objective-C中找出例外情况的原因
完成教程后: 我在这里得到了同样的例外: 应用程序崩溃了,但如果我启动调试会话并逐步完成代码,它不会崩溃Ios F在Objective-C中找出例外情况的原因,ios,objective-c,Ios,Objective C,完成教程后: 我在这里得到了同样的例外: 应用程序崩溃了,但如果我启动调试会话并逐步完成代码,它不会崩溃 2015-05-04 16:09:51.569 ToDoList[9223:67681] -[AddToDoItemViewController textField:]: unrecognized selector sent to instance 0x7fe570d4eff0 2015-05-04 16:09:51.574 ToDoList[9223:67681] *** Terminat
2015-05-04 16:09:51.569 ToDoList[9223:67681] -[AddToDoItemViewController textField:]: unrecognized selector sent to instance 0x7fe570d4eff0
2015-05-04 16:09:51.574 ToDoList[9223:67681] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AddToDoItemViewController textField:]: unrecognized selector sent to instance 0x7fe570d4eff0'
然后我读了这篇文章,解开了谜团:
原因是我错误地将文本字段连接到@implementation节而不是@interface节,它创建了一些我删除的方法。当然我很快就忘了
我怎么能在不知道上述任何信息的情况下找到自己的答案呢?导致该异常的原因是什么以及它来自何处?该异常表示您正在尝试访问
AddToDoItemViewController
的textView
属性,但它没有
因此,您的下一步应该是检查您是否已声明了这样的属性,并且作为一个插座,它是否已在Interface Builder中正确连接
编辑:
对不起,我没有注意到。
它试图调用的选择器是
textField:
,因此它必须是这样启动的函数。我假设您将控制器设置为TextView委托,但没有实现所需的方法。日志消息告诉您有东西试图调用-textField:
您的AddToDoItemViewController的方法
因此,第一步是检查该方法是否已实现——在您的情况下,它没有实现。你可能会被这些人的存在弄糊涂了
@property(weak, nonatomic) IBOutlet UITextField* textField
但是属性的自动合成生成了签名为-textField
的getter,这不同于-textField:
(后者接受一个参数,而前者没有)。是的,有一个:@property(弱的,非原子的)IBOutlet UITextField*textField;这是令人困惑的部分。那么您的意思是:-[AddToDoItemViewController textField:]:告诉我我正在调用一个不存在的方法,而编译器在编译时没有捕获到它?美好的由于Objective-C的动态特性,并不总是能够在编译时捕获此类内容——事实上,它允许对任何对象调用任何方法,尽管大多数时候编译器都会发出警告/错误。