从NSTimer更改变量值

时间:2011-10-05 13:16:51

标签: objective-c cocoa xcode4 global-variables nstimer

我是Cocoa / Objective C的新手。我要在NSSTring执行的每次迭代中更改全局NSTimer变量的值。我已经在文件顶部的appdelegate.m中声明了变量,所以它是全局的:

NSString *my_string = @"hello";

我致电NSTimer

[[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(scan:) userInfo:nil repeats:YES] fire];

和内部扫描我将新值设置为my_string

- (void) scan:(NSTimer *)timer{
    //some execution
    my_string = @"the new value";
}

但变量值始终相同“hello”,内容不会改变。 是否有可能做到这一点?溶液

2 个答案:

答案 0 :(得分:0)

您不需要调用fire方法,计划的计时器将在指定的间隔后自动触发。

另外,在scan:方法中设置一个断点,以确定它是否被调用。

答案 1 :(得分:0)

如果在.m文件中声明my_string变量,则其他文件将无法看到它(#import .h文件而不是.m文件)。你在同一个文件(appdelegate.m)中做了计时器吗?

我建议不要使用像这样的全局变量,因为在项目建立时它会经常混淆。您可以将它作为带有访问器的ivar,或者带有静态访问器的@implementation块中的静态,以便您可以从任何地方访问唯一的实例。

您可以记录更改以确保更改或设置断点。

- (void) scan:(NSTimer *)timer{
    //some execution
    my_string = @"the new value";
    NSLog(@"Changed my_string to %@", my_string);
}