作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为一个非主流流开发一个简单的 radio 闹钟应用程序,我想在其中醒来。它使用退出后台技巧在手机锁定时保持运行,类似于 Rise/Sleepcycle。
最初如果我要在午夜之前设置闹钟,第二天闹钟不会触发,但如果设置在当前时间之前但在 00:00 之前,闹钟几乎总是会在一分钟之内触发
所以我做了一些调整,以便也检查日期。我还包括条件,因此不可能在当前时间之前设置时间。现在虽然这解决了第二天的问题,但我发现火本身是喜怒无常的。有时它工作得很好,有时会有很大的延迟(在某些情况下长达 10 分钟)有时它根本不会触发。我真的想不通为什么会这样。
下面是我的代码。有没有人知道为什么它不一致?
- (void)viewDidLoad {
[super viewDidLoad];
radio = [[Radio alloc] initWithUserAgent:@"my app"];
[radio connect:STREAM_URL withDelegate:self withGain:(1.0)];
// dateTimePicker.date = [NSDate date];
dateTimePicker.date =
[[ NSDate alloc ] initWithTimeIntervalSinceNow: (NSTimeInterval) 2];
dateTimePicker.minimumDate =
[[ NSDate alloc ] initWithTimeIntervalSinceNow: (NSTimeInterval) 0 ];
}
-(void) presentMessage:(NSString *)message {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Radio Alarm" message: message delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
- (IBAction)alarmSetButtonTapped:(id)sender {
NSLog( @"Alarm Set Button Tapped");
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
dateFormatter.timeStyle = NSDateFormatterShortStyle;
dateFormatter.dateStyle = NSDateFormatterShortStyle;
NSString * dateTimeString = [dateFormatter stringFromDate: dateTimePicker.date];
NSLog( @"Alarm Set Button Tapped : %@", dateTimeString);
[self presentMessage:[NSString stringWithFormat:@"Alarm set for %@", dateTimeString]];
NSDate *alarmFireDate = dateTimePicker.date;
NSTimeInterval differenceFromNow = [alarmFireDate timeIntervalSinceNow];
//[alarmFireDate performSelector:@selector(PlayAlarm:) withObject:nil afterDelay:differenceFromNow];
[self performSelector:@selector(PlayAlarm:)
withObject:(self)
afterDelay:(differenceFromNow)];
最佳答案
你可以使用
[NSTimer scheduledTimerWithTimeInterval:differenceFromNow
target:self
selector:@selector(PlayAlarm:)
userInfo:nil
repeats:NO];
这个计时器非常准确。如果您需要中止计时器,只需将返回的 NSTimer* 保存在一个属性中并调用
[myTimer invalidate];
关于ios - NSTimeInterval 并不总是触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640408/
我是一名优秀的程序员,十分优秀!