2

我只是在学习使用 Objective-C 并尝试使用NSTimerwith 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 Updated。
我在这里做错了什么?

4

1 回答 1

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;
}
于 2012-12-02T16:21:37.087 回答