Получение последнего дня месяца

Паттерн, который может показаться вам полезным, - это выполнить проверку в верхней части функций, которые взаимодействуют с графическим интерфейсом, чтобы убедиться, что вы работаете в правильном потоке или нет, и при необходимости вызовите функцию. Например:

    public delegate void InvocationDelegate();

    public void DoGuiStuff(){
      if (someControl.InvokeRequired){
        someControl.Invoke(InvocationDelegate(DoGuiStuff));
        return;  
      }

      //GUI manipulation here
    }

Используя этот шаблон - если вы находитесь в правильном потоке при вызове метода, он не вызывает себя, но если вы используете другой поток, он будет вызывать себя, а затем return (поэтому логика манипуляций с графическим интерфейсом называется только когда-либо в любом случае).

49
задан Josh Caswell 17 April 2014 в 04:24
поделиться

2 ответа

NSDate *curDate = [NSDate date];
        NSCalendar *currentCalendar = [NSCalendar currentCalendar];
        NSRange daysRange = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth
         forDate:curDate];
        NSDateComponents* comps = [currentCalendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:curDate];
        [comps setDay:daysRange.length];
        NSDate *maximumDate = [[NSCalendar currentCalendar] dateFromComponents:comps];
0
ответ дан 7 November 2019 в 11:28
поделиться

Workaround Function:

-(int)GetLastDayOfMonth:(NSDate *)date
{
    int last_day = 27;
    NSCalendar *cal=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *compsMonth = [cal components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date];
    [compsMonth setDay:last_day];
    int month = [compsMonth month]; 
    while(TRUE){
        [compsMonth setDay:last_day+1];
        NSDate *dateFuture = [cal dateFromComponents:compsMonth];
        NSDateComponents *futureComps = [cal components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:dateFuture];
        if(month != [futureComps month]){
            return last_day;
        }
        last_day+=1;
    }
    return last_day;
}
-2
ответ дан 7 November 2019 в 11:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: