iOS 7 Примечание: Я задаю это в нескольких из этих вопросов, потому что использование NSUIntegerMax, кажется, больше не работает на iOS7, и использование его заставило меня преследовать мой хвост в течение приблизительно 3 часов.Я только что обнаружил, что когда я использую NSUIntegerMax
, NSDateComponents
игнорирует установленный год.Так, например, это НЕ меняет год:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:NSUIntegerMax fromDate:date];
[comps setYear:year];
return [gregorian dateFromComponents:comps];
Принимая во внимание, что это ДЕЛАЕТ:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger timeComps = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSTimeZoneCalendarUnit);
NSDateComponents *comps = [gregorian components:timeComps fromDate:date];
[comps setYear:year];
return [gregorian dateFromComponents:comps];
Это может быть ошибка iOS7, или может быть, что использование NSUIntegerMax было случайностью, котораябольше не работает.Я отправлю отчет об ошибке и получу окончательный ответ.
В любом случае, если вы хотите избежать непредвиденных последствий, укажите ВСЕ компоненты, иначе вы можете преследовать свой хвост!