2012-01-27 59 views
0

我的NSTimer(startTimer所)工作正常。它运行选定的方法(runTimer),但是我放置在(runTimer)中的任何代码都不会增加。例如,如果我像下面那样运行代码,它会打印出5次,但不会增加x。任何想法 - 感谢的NSTimer火灾而不是递增(写只允许进行控制台)

- (void)startTimer { 
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self  selector:@selector(runTimer:) userInfo:nil repeats:YES]; 
    [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:5]]; 
    } 
- (void)runTimer:(NSTimer *)aTimer { 
    int x; 
    x++; 
    NSLog(@"int x = %i",x); 
} 

回答

1

小心使用Objective-C中的方法静态变量通过smparkes的建议。他们那类的所有实例之间共享,所以如果你有任何物体的多个实例,这个代码是从,他的回答不会照着你所期望的方式。你会用一个实例变量更好,因为每个实例都将拥有自己的变量,不会影响其它实例:

在你的.h:

@interface MyClass : NSObject 
{ 
    int x; 
} 
-runTimer:方法

然后:

- (void)runTimer:(NSTimer *)aTimer { 
    NSLog(@"int x = %i", x++); 
} 

如果你保证只有一个这个类的实例(例如它是一个单例),-runTimer:方法中的一个静态变量可以工作,但我建议使用一个实例变量或@property作为它更好编程实践。

+0

谢谢大家 - 我现在明白了。我刚刚创建了一个ivar int(int num)集合属性,并使用self.num + = 1重新运行代码,并且所有工作都正常。 – pete 2012-01-27 17:11:14

+0

很高兴听到它。请确保您通过点击答案左侧的复选标记来接受最能帮助您的答案。这样做可以让未来的回答者获得更多的帮助。 – 2012-01-27 17:38:43

2

你得到runTimer被称为新x每次。如果你把它变成静态的,它会按照你期望的方式行事

static int x; 

它会按照你的期望行事。对于清洁,我还初始化:

static int x = 0; 
1

runTimer申明x每一次,即它创建一个新的变量,设置为0,增加它并打印出来,所以它永远是相同的值。你需要的是方法的范围之外的变量,以增加它