iOS 7 注意:我把这个放在其中几个问题中是因为在 iOS7 上似乎不再使用 NSUIntegerMax,并且使用它导致我追了大约 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 工作是侥幸,不再有效。我将提交错误报告并获得明确的答案。
无论如何,如果您想避免意外后果,请指定所有其他组件,否则您可能会追尾!