获取NSTimer调用方法的问题

时间:2012-12-02 15:49:22

标签: objective-c nstimer

我只是学习使用Objective-C并试图使用NSTimer和scheduledTime Interval而没有运气。我正在使用的代码如下:

#import <Foundation/Foundation.h>
#import "timerNumber1.h"

int main(int argc, const char * argv[])
{
@autoreleasepool {

    NSTimer *timerNumber1;

    NSInteger counter=0;

    while (counter<5){


        timerNumber1 = [NSTimer scheduledTimerWithTimeInterval:1 target:timerNumber1 selector: @selector(updateTimer:) userInfo:nil repeats:YES];

    NSLog(@"Hello, World!");
        counter++;
    }
}
return 0;
}

timerNumber1标题如下所示

#import <Foundation/Foundation.h>

@interface timerNumber1 : NSObject
-(void) updateTimer;

@end

并且实施

#import "timerNumber1.h"

@implementation timerNumber1

-(void) updateTimer{
NSLog(@"Timer Updated!");

}
@end

该方法似乎永远不会触发,我从未看到Timer更新 我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

变量timerNumber1尚未初始化(可能是nil),因此target参数无效。将在updateTimer对象上调用nil方法,该对象在Objective-C中无声地失败。

您需要先创建对象,然后才能继续完成。

旁注:有一个与变量名称完全相同的类有点不寻常。这通常不是一个好主意,至少在可读性方面。另外,我不是100%确定你需要为每次重复创建一个计时器,因为你有repeats:YES。但我会让你判断你想要用你的代码做什么。 : - )

编辑:刚注意到其他内容,选择器可能有点偏离 - 选择器中有:,但updateTimer不接受任何参数。在这种情况下,我不认为那里应该有一个冒号。

所以,尝试这样的事情:

int main(int argc, const char * argv[])
{
    @autoreleasepool {

        NSTimer *timer;
        timerNumber1 *timerNumber1Object = [[timerNumber1 alloc] init];

        NSInteger counter=0;

        while (counter<5){
            timer = [NSTimer scheduledTimerWithTimeInterval:1 target:timerNumber1Object selector: @selector(updateTimer) userInfo:nil repeats:YES];

            NSLog(@"Hello, World!");
            counter++;
        }
    }
    return 0;
}