2012-03-26 2 views
1

Я пытаюсь сделать простую сигнализацию.сравнение сигнализации и даты

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

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

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

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

+0

«нужно сохранить», это я забыл .... глупое глупое мне .... спасибо – Acunamatata

+0

Конечно, я хочу дать вам верх, но у меня нет имён репутации для этого ... i toooo young .. . :( – Acunamatata

+0

Не волнуйся, я возвращаюсь ... – Acunamatata

Смежные вопросы