2013-01-15 31 views
-1

我的計時器沒有反覆運行。我對iOS的編碼還不熟悉,但是從我在本網站上收集的內容以及對其他問題的回答中,它應該可以工作。基本上,定時器應該在timerStart按鈕被按下時開始更新,並且當按下timerStop按鈕時它應該停止。NSTimers沒有重複運行

繼承人的示例代碼 .h文件中

#import <UIKit/UIKit.h> 
#import <CoreLocation/CoreLocation.h> 

    @interface PGSecondViewController : UIViewController <CLLocationManagerDelegate> 

    { 
    NSTimer *Timer; 
    IBOutlet UILabel *displayTimer; 
    int ticks; 

    } 

    @property (nonatomic, retain) IBOutlet UILabel *displayTimer; 

    -(IBAction)timerStart:(id)sender; 
    -(IBAction)timerStop:(id)sender; 
    -(void)updateTimer:(NSTimer *)theTimer; 

    @end 

和繼承人的.m文件

#import "PGSecondViewController.h" 

@interface PGSecondViewController() 

@end 

@implementation PGSecondViewController 

@synthesize displayTimer; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    UITabBarItem *tbi = [self tabBarItem]; 
    [tbi setTitle:@"Start"]; 

    // Custom initialization 
} 
return self; 
} 


- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
[displayTimer setText:@"00:00:00"]; 

} 

} 

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

-(IBAction)timerStart:(id)sender; 
{ 
Timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self  selector:@selector(updateTimer:) userInfo:nil repeats:YES]; 


} 
-(IBAction)timerStop:(id)sender; 
{ 
[Timer invalidate]; 
Timer = nil; 
} 

-(void)updateTimer:(NSTimer *)theTimer 
{ 
if (ticks == nil) 
{ 
    ticks = 0; 
} 
else 
{ 
    ticks = ticks + 1; 
} 
[displayTimer setText:[NSString stringWithFormat:@" %d ", ticks]]; 

} 


@end 

基本上我得到的是一旦啓動定時器和NSLabel顯示爲0,但沒有任何反應後, 。我已經在調度計時器後用[[NSRunLoop currentRunLoop] addTimer:Timer forMode:NSDefaultRunLoopMode]和[[NSRunLoop currentRunLoop]運行]嘗試過,但它沒有幫助。

任何想法??

回答

2

你的if(ticks == nil)壞了;刻度是一個整數,而不是一個對象。它的初始值將爲0.

我剛剛通過更改該方法修復了一下,並且一切正常。

-(void)updateTimer:(NSTimer *)theTimer 
{ 
    ticks++; 
    [displayTimer setText:[NSString stringWithFormat:@" %d ", ticks]]; 
} 
+0

但理論上,ticks = nil總是假的,所以tics應該增加。 –

+1

Nope - (0 == nil)的計算結果爲true。與零比較的非零整數評估爲false。所以,這就是爲什麼蜱總是零。 –

+0

大多數人不會做這個東西,壽。另外,你不應該忽略編譯器警告。 (在你的情況下,你會說你正在比較一個指針和一個整數,當你解決這個問題時,你的問題很可能會消失)... fwiw –