我只是学习使用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更新 我在这里做错了什么?
答案 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;
}