2011-01-23 47 views
10

我創造之後重複和發射NSTimer有:iPhone - 的NSTimer不火

ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
              target:self 
             selector:@selector(handleTimer:) 
             userInfo:nil 
              repeats:YES]; 
[ncTimer fire]; 

- (void)handleTimer:(NSTimer *)chkTimer { 
    // do stuff 
} 

我保留我的定時器:

@property (nonatomic, retain) NSTimer *ncTimer; 

對於一些定時器不重複的原因。它只發射一次而不再發射一次。

+0

*我的一個愚蠢的問題,但它是最好的,以確保:*我相信你不是handleTimer方法中的任何位置無效計時器? – 2011-01-23 11:36:46

+0

不,我不是..我唯一需要補充的是,我在viewDidLoad方法 – Zigglzworth 2011-01-23 11:46:17

回答

7

你不能只是分配給您已經把在你的頭一個屬性的計時器。這應該工作:

self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];

此外:火方法觸發計時器,不循環。如果定時器不重複,則無效。在說出火線後,加上:


BOOL timerState = [ncTimer isValid]; 
NSLog(@"Timer Validity is: %@", [email protected]"YES":@"NO"); 
+1

「計時器有效期是:是」但仍然沒有運氣......計時器不重複。這裏可能是什麼問題? – Zigglzworth 2011-01-23 12:14:45

+0

我只是做了一個小測試應用程序,看看發生了什麼,它對我自己的工作很好。你的實現的頂部是否有@synthesize ncTimer? – 2011-01-23 12:27:36

3

分配給ncTimer你有不會啓動性能retain功能。

假設聲明的成員對象,你需要做內:

self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES] 
+0

中添加了自己的定時器。但問題仍然存在 – Zigglzworth 2011-01-23 12:10:41

34

-fire:方法手動觸發一次。對於要啓動一個定時器和重複,你必須把它添加到使用[[NSRunLoop currentRunLoop] addTimer: forMode:]

19

得到它

添加定時器mainRunLoop一個runloop使其工作

在這裏你去:

目標C :

self.ncTimer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; 

夫特:

var ncTimer = NSTimer(timeInterval: 2.0, target: self, selector: Selector("handleTimer"), userInfo: nil, repeats: true) 
NSRunLoop.mainRunLoop().addTimer(ncTimer, forMode: NSDefaultRunLoopMode) 
6

也可將此塊,其插入在主線程定時器的創建內部複製你的代碼。

代碼將因此保持:

dispatch_async(dispatch_get_main_queue(), ^{ 
    self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
       target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES]; 
});