Подтвердить что ты не робот

Увеличить метод 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;
}
4b9b3361

Ответ 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))