ios - NSTimeInterval 并不总是触发

标签 ios objective-c uidatepicker nstimeinterval

我正在为一个非主流流开发一个简单的 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/

相关文章:

ios - 子类化 MKAnnotation 错误,符合协议(protocol)

iphone - 从 plist 文件中读取数据

ios - NSDateFormatter 结果与 apple.cn 截图不同

iphone - UIDatePicker 上下限

ios - 在 UIDatePicker 中将 Years 设置为最大值

ios - 哪个 iOS 引用可以在 iPad mini 上进行实时视频播放?

ios - swift 闭包如何引用它运行的类的属性?

ios - 将测试从一个单元测试目标导入到另一个

objective-c - 在 NSTableView 的自定义 NSCell 中使用绑定(bind)公开模型对象

iphone - UIActionSheet - 类未实现 'UIActionSheetDelegate' 协议(protocol)