Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSTimeInterval不总是启动_Ios_Objective C_Uidatepicker_Nstimeinterval - Fatal编程技术网

Ios NSTimeInterval不总是启动

Ios NSTimeInterval不总是启动,ios,objective-c,uidatepicker,nstimeinterval,Ios,Objective C,Uidatepicker,Nstimeinterval,我正在为一个非主流流开发一个简单的收音机闹钟应用程序,我想唤醒它。当手机锁定时,它使用“退出后台”技巧保持运行,类似于上升/睡眠循环 最初,如果我在午夜之前设置闹钟,闹钟第二天不会响,但如果设置在当前时间之前,但在00:00之前,闹钟几乎总是在一分钟的转折点响 所以我做了一些调整,以便日期也被检查。我还包括了一些条件,因此不可能在当前时间之前设置时间。现在,虽然这是第二天的问题,我发现火本身是喜怒无常的。有时它工作得很好,有时会有巨大的延迟(有时长达10分钟),有时它根本不会开火。我真的不明白为

我正在为一个非主流流开发一个简单的收音机闹钟应用程序,我想唤醒它。当手机锁定时,它使用“退出后台”技巧保持运行,类似于上升/睡眠循环

最初,如果我在午夜之前设置闹钟,闹钟第二天不会响,但如果设置在当前时间之前,但在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];

完美的现在它在所选分钟结束时开火。正是我想要的。谢谢