сравнение тревог и дат - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь сделать простой сигнал.

в этой части кода берут дату из даты выбора (ТОЛЬКО время выбора).

и, если будильник является текущей датой, прежде чем я добавлю день.

 // ALARM UNO
// Set Allarme Uno


   -(void)viewDidAppear:(BOOL)animated{

  NSDate *pickerDate = [NSDate date];

      NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];


      // Break the date up into components
  NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit |  NSMonthCalendarUnit |  NSDayCalendarUnit )
                                        fromDate:pickerDate];
   NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit |          NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                           fromDate:pickerDate];
// Set up the fire time
      NSDateComponents *dateComps = [[NSDateComponents alloc] init];
      [dateComps setDay:[dateComponents day]];
       [dateComps setMonth:[dateComponents month]];
           [dateComps setYear:[dateComponents year]];
           [dateComps setHour:[timeComponents hour]];
           //Notification will fire in one minute
           [dateComps setMinute:[timeComponents minute]];
           [dateComps setSecond:0];
          NSDate *itemDate = [calendar dateFromComponents:dateComps];
           [dateComps release];


[alarmDatePickerUno setDate:itemDate animated:YES];

}

          -(IBAction)setAlarmUno:(id)sender{

NSLog(@"picker in allarme");
NSDateFormatter *formatter =
[[[NSDateFormatter alloc] init] autorelease];
[formatter setTimeStyle:NSDateFormatterMediumStyle];

NSCalendar *currentCalendar = [NSCalendar currentCalendar]; 


AlarmDateUno = [alarmDatePickerUno date];
NSLog(@"allarme settata alle");
NSLog(@"%@", AlarmDateUno);


if ([alarmDatePickerUno.date compare:[NSDate date]] == NSOrderedAscending)
{
    NSLog(@"Date is not valid");

    NSDateComponents *oneDay = [[NSDateComponents alloc] init];
    [oneDay setDay:1];
    NSLog(@"Aggiungo un giorno");

    AlarmDateUno = [currentCalendar dateByAddingComponents:oneDay toDate:AlarmDateUno       options:0];
    NSLog(@"%@", AlarmDateUno);


    //return;
}

После этого я сравниваю текущую дату с будильником ...

// CONTROLLO TEMPO UNO

- (void)runTimerUno {

myTickerUno = [NSTimer scheduledTimerWithTimeInterval: 0.5
                                               target: self
                                             selector: @selector(showActivityUno)
                                             userInfo: nil
                                              repeats: YES];

}

- (void)showActivityUno {

 //  NSDate *date = [NSDate date];

if(isAlarmUnoOn == 1 && AlarmUnoPlaying ==0){

    NSLog(@"Confronto data e tempo");
   if ([[[NSDate date] earlierDate:AlarmDateUno] isEqualToDate: AlarmDateUno])   
    {
        AlarmUnoPlaying = 1;

        [self playAlarmSoundUno];
    }               

}

}

Это проблема с датой в окне выбора, которая была раньше текущего времени, и я добавляю часы, которые я получаю в строке EXC_BAD_ACCESS:

 if ([[[NSDate date] earlierDate:AlarmDateUno] isEqualToDate: AlarmDateUno])   

Зомби скажи мне [__NSDate timeIntervalSinceReferenceDate]: сообщение отправлено освобожденному экземпляру 0x914b710

Я пробую все, и я не понимаю, почему .... кто-нибудь может мне помочь, пожалуйста?

1 Ответ

1 голос
/ 26 марта 2012

Похоже, что AlarmDateUno является свойством.Это верно?Если это так, вам нужно сохранять его всякий раз, когда вы его устанавливаете - в противном случае он может быть освобожден до того, как вы попытаетесь получить к нему доступ снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...