我有一個NSTimer工作正常,並以1秒的間隔倒計時。但是我希望計時器在沒有1秒延遲的情況下立即觸發。NSTimer的[定時器火]不起作用
我想打電話[timer fire]
應該爲此工作(描述here),但它沒有區別。我希望定時器被觸發一樣快,如果我定的時間間隔爲0
- (void)onStartButtonPressed:(UIButton*)sender
{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:tv];
NSIndexPath* indexPath = [tv indexPathForRowAtPoint:buttonPosition];
NSInteger index = indexPath.row;
// starts timer for cell at the index path
if (indexPath != nil)
{
NSTimer* timer = [timerArray objectAtIndex: index];
if ([timer isEqual:[NSNull null]]) {
NSLog(@"It's empty");
// start timer
NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(onTick:)
userInfo:indexPath
repeats:YES];
// [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
NSLog(@"before timer fire");
[timer fire];
// update data array of timer objects and countdowns
NSInteger selectedTimeIdx = [[selectedTimeIdxArray objectAtIndex: index] integerValue];
NSInteger selectedTime = [pickerTimeArray[selectedTimeIdx] integerValue];
[timerArray replaceObjectAtIndex:index withObject:timer];
[countdownArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInteger:selectedTime*60]];
} else {
NSLog(@"It's not empty");
}
}
- (void)onTick:(NSTimer *)timer
{
NSLog(@"on tick method starts");
// get the timer's owner's index path and update label
NSIndexPath* indexPath = [timer userInfo];
NSInteger index = indexPath.row;
// update countdown
NSInteger countdown = [[countdownArray objectAtIndex: index] integerValue];
[countdownArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInteger:--countdown]];
// NSLog(@"countdown: %ld", (long)countdown);
[tv reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
// NSLog(@"Tic indexPath: %@", indexPath);
if (countdown == 0)
{
[timer invalidate];
timer = nil;
}
}
定時器的作品,但我不希望這是一個1秒的延遲爲它最初觸發。我想讓計時器立即開始。
編輯:我添加了rmaddy建議的日誌。這裏是我的結果(I改變的間隔時間至3):
2015年5月19日14:41:計時器火
2015年5月19日14之前:02.827餐廳[77915 4206]: 41:02.827餐廳[4206:77915]上蜱方法開始
2015年5月19日14:41:05.827餐廳[4206:77915]上蜱方法開始
2015年5月19日14時41分: 08.828餐廳[4206:77915]上勾選方法開始
添加一些日誌語句。 1)在'onTick:'方法的開始處添加一個。 2)在調用'[timer fire]'之前添加一個'。運行你的代碼。將第一個日誌的輸出和'onTick:'的前幾個日誌粘貼到您的問題中,以便我們看到時間戳。 – rmaddy
我不能重現這一點。以下簡單的應用程序(只需將其放置在ViewController.m中並將其連接起來)似乎可以像您所請求的那樣工作:https://gist.github.com/rnapier/fe84f1df50dd2b8e51e8。請將您的代碼簡化爲Minimal,Complete和Verifiable示例(http://stackoverflow.com/help/mcve)。 –
(另外請注意,上面的代碼不會編譯,'timer'缺少'*',這表明這不是你的代碼 –