首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTimeInterval并不总是开火

NSTimeInterval并不总是开火
EN

Stack Overflow用户
提问于 2015-11-10 21:57:08
回答 1查看 61关注 0票数 1

我正在为一个非主流的流做一个简单的无线电闹钟应用程序,我想醒来。它使用选择退出后台技巧,以保持运行时,手机被锁定,类似于上升/睡眠周期。

最初,如果我要在午夜前设置闹钟,那么第二天就不会发出警报,但如果提前设定时间,但在00:00之前,通常会在每分钟一分钟之前发出警报。

所以,我做了一些调整,以便日期也被检查。我还包括了一些条件,这样就不可能在当前时间之前设定一个时间。现在,虽然这是第二天的问题,我发现火灾本身是喜怒无常。有时它工作得很完美,有时会有很大的延迟(在情况下长达10分钟),有时它根本不会开火。我真想不出为什么会发生这种事。

下面是我的密码。有人知道为什么不一致吗?

代码语言:javascript
复制
- (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)];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 22:01:15

您可以使用

代码语言:javascript
复制
[NSTimer scheduledTimerWithTimeInterval:differenceFromNow
    target:self
    selector:@selector(PlayAlarm:)
    userInfo:nil
    repeats:NO];

这个计时器相当精确。如果需要中止计时器,只需将返回的NSTimer*保存在属性中并调用

代码语言:javascript
复制
[myTimer invalidate];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33640408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档