我正在使用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 Lie Detector [38912:207] * 由于未捕获的异常'NSInvalidArgumentException'而终止app,原因:' - [SecondViewController myMethod:]:无法识别的选择器发送到实例0x4b2ca40'
那我在这里做错了什么?
答案 0 :(得分:5)
我在使用Swift时遇到了这个问题。在Swift中我发现NSTimer的目标对象必须是NSObject可能并不明显。
class Timer : NSObject {
init () { super.init() }
func schedule() {
NSTimer.scheduledTimerWithTimeInterval(2.0,
target: self,
selector: "myMethod",
userInfo: nil,
repeats: true)
}
func myMethod() {
...
}
}
希望这有助于某人。
答案 1 :(得分:4)
要么只能使用
- (void)myMethod: (id)sender
{
// Do things
}
或者你可以(从方法名称中删除:)..
animationTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(myMethod) userInfo:nil repeats: YES];
希望这会对你有所帮助
答案 2 :(得分: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];
答案 3 :(得分:2)
计时器的操作方法should take one argument:
- (void)myMethod: (NSTimer *)tim
{
// Do things
}
此方法的名称为myMethod:
,包括冒号。您当前方法的名称为myMethod
,没有冒号,但您可以通过传递包含它的方法名称来创建计时器:selector:@selector(myMethod:)
。
目前,计时器会将消息myMethod:
发送给您的对象;
myMethod
)并引发异常。