initwithtarget:self,self是NSObject

时间:2015-01-06 21:55:59

标签: ios objective-c nsobject

假设我想创建一个GestureRecognizer对象,并在那里拥有我的整个逻辑。因此,当我将NSObject添加为识别器的目标时:

initWithTarget:self action:@selector(doTheRecognizerThing:)

我正面临一个问题,我不知道为什么。我得到了

unrecognized selector sent to instance

错误,尽管我的NSObject中正确实现了doTheRecognizerThing方法。 如果我添加目标并在任何其他对象(如UIView或UIViewController)中实现该方法,我不会遇到任何问题。对此有解释吗?

修改

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self
                                                                                              action:@selector(doTheRecognizerThing:)];

Implemantation

- (void) doTheRecognizerThing:(UIPanGestureRecognizer *)panGestureRecognizer {
  //blah blah blah
}

错误讯息:

-[CALayerArray doTheRecognizerThing:]: unrecognized selector sent to instance 0x14648a80
2015-01-06 23:05:20.788 Gestures[2203:1094298] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayerArray doTheRecognizerThing:]: unrecognized selector sent to instance 0x14648a80'

2 个答案:

答案 0 :(得分:1)

您将在某一时刻将识别器添加到视图中。这强烈地保存了识别器。在某些时候,你的对象消失了,而视图仍然存在 - 并且随之而来的是识别器。这会调用该方法,但对象已经消失并被其他东西取代。

答案 1 :(得分:-1)

试试这个:

initWithTarget:ObjectWithThatMethod action:@selector(doTheRecognizerThing:)

确保doTheRecognizerThing位于头文件中。 并确保NSObject不是零。