Search code examples
iosnsdatenscalendarnsdatecomponents

Getting the correct date and set notification ios


I am trying to set repeating notifications for every saturday and sunday but for some reason the date is coming out wrong.This is my code

NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitWeekday | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekOfMonth |NSCalendarUnitWeekOfMonth;
NSDateComponents *comps = [calendar components:unitFlags fromDate:[NSDate date]];
NSDateComponents *dt = [[NSDateComponents alloc]init];
comps.hour   = hour;
comps.minute = [[goal.reminderTimeInfo valueForKey:@"minutes"] intValue];
[dt setMonth:[comps month]];
[dt setYear:[comps year]];
[dt setWeekOfMonth:[comps weekOfMonth]];
comps.weekday = 1;  //Sunday
[dt setWeekday:[comps weekday]];

NSDate *sundayDate = [calendar dateFromComponents:dt];

Its suppose to give out

2015-07-05 19:00:00 +0000

but its giving

2015-07-04 19:00:00 +0000

And if give the local notification a particular date.For example its sunday.Will it fire every sunday?


Solution

  • You did not change the hour and the minutes for dt but for comps.

    NSCalendar *calendar = [NSCalendar currentCalendar];
        unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitWeekday | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekOfMonth |NSCalendarUnitWeekOfMonth;
        NSDateComponents *comps = [calendar components:unitFlags fromDate:[NSDate date]];
        NSDateComponents *dt = [[NSDateComponents alloc]init];
    
        dt.hour   = 19;
        dt.minute = 00;
        [dt setMonth:[comps month]];
        [dt setYear:[comps year]];
        [dt setWeekOfMonth:[comps weekOfMonth]];
        [dt setWeekday:1];
    
        NSDate *sundayDate = [calendar dateFromComponents:dt];