如何在iOS中的特定时间启动和停止计时器

如何在iOS中的特定时间启动和停止计时器,ios,xcode6,nsdate,nstimer,uilocalnotification,Ios,Xcode6,Nsdate,Nstimer,Uilocalnotification,我的应用程序在特定的时间段检测音频,如10:00AM(startTime)-10:30AM(endTime),等等。现在当当前时间达到开始时间(表示当前时间也是10:00AM)时,如何调用音频检测过程并在(endTime)10:30AM停止检测过程。假设另一个时间间隔开始于上午10:15(开始时间)-上午10:45(结束时间)如何将结束时间从上午10:30更新到上午10:45。如何检查当前时间何时到达开始时间和结束时间。请帮助我它的紧急情况。谢谢这里我的代码 ViewController.h

我的应用程序在特定的时间段检测音频,如10:00AM(startTime)-10:30AM(endTime),等等。现在当当前时间达到开始时间(表示当前时间也是10:00AM)时,如何调用音频检测过程并在(endTime)10:30AM停止检测过程。假设另一个时间间隔开始于上午10:15(开始时间)-上午10:45(结束时间)如何将结束时间从上午10:30更新到上午10:45。如何检查当前时间何时到达开始时间和结束时间。请帮助我它的紧急情况。谢谢这里我的代码

ViewController.h

@interface ViewController : UIViewController

{

  BOOL IsListening;

}
//会话数组是包含程序开始和结束时间的字典数组

   ViewController.m

   -(void)viewDidLoad
   {

     [super viewDidLoad];

     NSTimer* listener_timer = [NSTimer scheduledTimerWithTimeInterval: 10.0 target: self
                                                  selector: @selector(listeningHandler:) userInfo: nil repeats: YES];

    }

   -(void)listeningHandler:(NSTimer*)time
    {

       if (!IsListening)
       {
          double currentTime=[[NSDate date] timeIntervalSince1970];

          for (NSDictionary * session in SessionsArray)
          {
            double startTime=[[session objectForKey:@“startTime”] doubleValue];
            double endTime=[[session objectForKey:@“endTime”] doubleValue];

            if (currentTime > startTime && currentTime < endTime)
            {
             //start listening.

              IsListening =YES;


              /*

             //detection process code

             */                 
               NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:endTime];
               NSTimer *timer = [[NSTimer alloc] initWithFireDate:fireDate
                                                       interval:5
                                                         target:nil
                                                       selector:@selector(fireEndtimeAlarm)
                                                       userInfo:nil
                                                        repeats:YES];

              NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
             [runLoop addTimer:timer forMode:NSDefaultRunLoopMode];

            }

          }

       }
      else
      {

         double currentTime=[[NSDate date] timeIntervalSince1970];
         for (NSDictionary * session in SessionsArray)
         {
            double startTime=[[session objectForKey:@"startTime"] doubleValue];
            double endTime=[[session objectForKey:@"endTime”] doubleValue];

            if (currentTime > startTime && currentTime < endTime)
            {
            // in between session

               IsListening =YES;
            /*

             //detection process code

             */          

             }

         }

       }
  }

 -(void)fireEndtimeAlarm

  {

     IsListening = NO;

     //stop detecting process at endTime  

  }
ViewController.m
-(无效)viewDidLoad
{
[超级视图下载];
NSTimer*listener_timer=[NSTimer scheduledTimerWithTimeInterval:10.0目标:self
选择器:@selector(listengHandler:)userInfo:nil repeats:YES];
}
-(void)ListingHandler:(NSTimer*)时间
{
如果(!IsListening)
{
double currentTime=[[NSDate date]时间间隔1970];
for(会话数组中的NSDictionary*会话)
{
double startTime=[[session objectForKey:@“startTime”]doubleValue];
double-endTime=[[session objectForKey:@“endTime”]doubleValue];
如果(currentTime>startTime&¤tTimestartTime&¤tTime
您可以使用2个本地通知来实现这一点

首先,在到达特定时间时安排特定通知,然后将运行触发器,并在该时间启动音频和视频

计划在30分钟后发出第二次通知,然后停止音频

对于本地通知,您可以遵循以下步骤


ios中的启动计时器和停止计时器

start Timer
timer= [NSTimer scheduledTimerWithTimeInterval:60.0f
                                            target: self
                                          selector: @selector(methodFromTimer)
                                          userInfo: nil
                                           repeats: YES];

stop timer

[timer invalidate];
timer=nil;