Увеличить метод NSDate +1 день Objective-C?
Это мой метод, который я использую для увеличения на один день в моем навигационном баре и задавая имя дня как заголовок. Я знаю, что это неправильно, потому что я устанавливал переменную "сегодня" каждый раз при ее вызове. Но я не могу понять, как увеличить +1 день каждый раз, когда я вызываю этот метод.
-(void)stepToNextDay:(id)sender
{
today = [NSDate date];
NSDate *datePlusOneDay = [today dateByAddibgTimeInterval:(60 * 60 * 24)];
NSDateFormatter *dateformatterBehaviour = [[[NSDateFormatter alloc]init]autorelease];
[dateFormatter setDateFormat:@"EEEE"];
NSString *dateString = [dateFormatter stringFromDate:datePlusOneDay];
self.navigationItem.title = datestring;
}
Ответы
Ответ 1
Сохраните дату, которую вы показываете в свойстве (ivar,...) вашего контроллера вида. Таким образом вы можете получить текущую настройку, когда вы перейдете на следующий день.
Если вы хотите надежно добавить даты, используйте NSCalendar и NSDateComponents, чтобы получить блок "1 день", и добавьте его к текущей дате.
NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar] autorelease];
NSDateComponents* components = [[[NSDateComponents alloc] init] autorelease];
components.day = 1;
NSDate* newDate = [calendar dateByAddingComponents: components toDate: self.date options: 0];
Ответ 2
Как из iOS 8 NSGregorianCalendar
лишается, обновленный ответ будет,
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
NSDate *newDate = [calendar dateByAddingComponents:components toDate:today options:0];
Swift Code:
var today:NSDate = NSDate()
let calender:NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
var components:NSDateComponents = NSDateComponents()
components.setValue(1, forComponent: NSCalendarUnit.CalendarUnitDay)
var newDate:NSDate! = calender.dateByAddingComponents(components, toDate:today, options: NSCalendarOptions(0))