2012-01-27 64 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,增加它並打印出來,所以它永遠是相同的值。你需要的是方法的範圍之外的變量,以增加它