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的动态特性,并不总是能够在编译时捕获此类内容——事实上,它允许对任何对象调用任何方法,尽管大多数时候编译器都会发出警告/错误。