2012-07-02 32 views
3

我刚刚尝试通过本地通知制作闹钟应用程序,但这并没有做到这一点,因为我需要一个警报才能出现,而不是进入iOS 5+的通知中心用NSTimer制作闹钟

到目前为止,我一直在努力与nstimer及其功能,所以我想知道如果有人可以帮忙。

我希望当用户选择一个时间(通过UIDatePicker,只有时间)在这个时候显示警报。我已经想出了如何从UIDatePicker获得时间,但我不知道如何正确设置nstimer的触发函数。这是我迄今为止所尝试的,如果有人能够帮助......非常感谢。谢谢

例(它不断进入功能每秒反对一定的时间,我告诉它太...不是我想要的):

NSDate *timestamp; 
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; 

[comps setHour:2]; 
[comps setMinute:8]; 
timestamp = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

NSTimer *f = [[NSTimer alloc] initWithFireDate:timestamp 
          interval:0 
           target:self 
          selector:@selector(test) 
          userInfo:nil repeats:YES]; 

NSRunLoop *runner = [NSRunLoop currentRunLoop]; 
[runner addTimer:f forMode: NSDefaultRunLoopMode]; 
+1

集'重复:NO' – Nate

+0

@Nate但如果用户选择他们想重复鼻翼什么M&我不认为这是有道理的,因为它是每秒重复,而不是在我设定的时间重复(2:08)? –

+0

对于闹钟应用程序,您在开始时无法知道用户是否会重复(打盹)。所以,当你第一次创建定时器时,你不能做出这个决定。当警报熄灭('test'),那么你需要决定是否创建一个新的定时器,并使用snooze *间隔* – Nate

回答

2

正如@Nate说变化

NSTimer *f = [[NSTimer alloc] initWithFireDate:timestamp 
          interval:0 
           target:self 
          selector:@selector(test) 
          userInfo:nil repeats:YES]; 

NSTimer *f = [[NSTimer alloc] initWithFireDate:timestamp 
          interval:0 
           target:self 
          selector:@selector(test) 
          userInfo:nil repeats:NO]; //<-- Change here 
+0

谢谢珍妮斯,但如果用户选择他们想要重复闹钟?我不认为这是有道理的,因为它是每秒重复,而不是在我设定的时间重复(2:08)? –

+0

那么你想要的是如果你设置2:08闹钟应该重复几天? –

+0

是的。我现在说2:08就是一个例子,实际时间将由用户决定。谢谢 –