的NSTimer导致“无法识别的选择”撞车火灾时(NSTimer causes “unrecogni

2019-09-18 08:25发布

我使用NSTimer运行的动画(现在只是把它myMethod )。 然而,它导致飞机坠毁。

下面的代码:

@implementation SecondViewController


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.


- (void) myMethod
{
    NSLog(@"Mark Timer Fire");

}


- (void)viewDidLoad
{ 
[super viewDidLoad];



NSLog(@"We've loaded scan");

[NSTimer scheduledTimerWithTimeInterval:2.0
                                 target:self
                               selector:@selector(myMethod:)
                               userInfo:nil
                                repeats:YES];

animationTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(myMethod:) userInfo:nil repeats: YES];


}

而这里的碰撞时输出

- [SecondViewController myMethod的:]:无法识别的选择发送到实例0x4b2ca40 2012-06-21 12:19:53.297测谎[38912:207] *终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:“ - [SecondViewController myMethod的:] :无法识别的选择发送到实例0x4b2ca40'

所以我在做什么错在这里?

Answer 1:

要么你只能使用

- (void)myMethod: (id)sender
{
 // Do things
}

或者你可以做(​​删除:从两个方法名)..

animationTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(myMethod) userInfo:nil repeats: YES];

希望这个能对您有所帮助



Answer 2:

我就遇到了这个问题,同时利用斯威夫特。 它可能不是很明显,在斯威夫特我发现的NSTimer的目标对象必须是一个NSObject。

class Timer : NSObject {
   init () { super.init() }
   func schedule() {
      NSTimer.scheduledTimerWithTimeInterval(2.0,
                             target: self,
                             selector: "myMethod",
                             userInfo: nil,
                            repeats: true)
  }
  func myMethod() {
     ...
  }
}

希望这可以帮助别人。



Answer 3:

替换此

[NSTimer scheduledTimerWithTimeInterval:2.0
                             target:self
                           selector:@selector(myMethod:)
                           userInfo:nil
                            repeats:YES];

这样

[NSTimer scheduledTimerWithTimeInterval:2.0
                             target:self
                           selector:@selector(myMethod)
                           userInfo:nil
                            repeats:YES];


Answer 4:

计时器的操作方法应采取一个参数 :

- (void)myMethod: (NSTimer *)tim
{
     // Do things
}

此方法的名称为myMethod: ,包括结肠。 您当前的方法名是myMethod没有冒号,但你通过传递有它的方法名称创建定时器: selector:@selector(myMethod:)

目前,然后,定时器将消息发送myMethod:给你的对象; 你的对象并没有作出回应(但会回应myMethod ),并引发一个例外。



文章来源: NSTimer causes “unrecognized selector” crash when it fires