сравнение будильника и даты

Я пытаюсь поднять простую тревогу.

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

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

 // 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

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


person Acunamatata    schedule 26.03.2012    source источник


Ответы (1)


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

person Josh Brown    schedule 26.03.2012
comment
Конечно, я хочу дать тебе положительный голос, но у меня нет такой минимальной репутации ... Я слишком молод ... :( - person Acunamatata; 27.03.2012