2012-03-26 115 views
1

我試圖做一個簡單的報警。報警和日期比較

在此代碼部分a從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

我嘗試每一件事,我不明白爲什麼....任何人都可以幫助我嗎?

回答

1

看起來AlarmDateUno是屬性。那是對的嗎?如果是這樣,您需要在設置它時保留它 - 否則,可能會在嘗試再次訪問它之前釋放它。 「

+0

」需要保留「這是我忘了....笨笨笨我....謝謝 – Acunamatata 2012-03-27 06:33:36

+0

當然,我想給你一個upvote,但我沒有theminimun聲譽...我toooo年輕.. :( – Acunamatata 2012-03-27 14:02:50

+0

別擔心男人,我回來... – Acunamatata 2012-03-27 14:26:43