gpt4 book ai didi

ios - NSTimeInterval 并不总是触发

转载 作者:行者123 更新时间:2023-11-29 10:23:23 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com