Matemática com datas é sempre complicada, calcular o número de meia-noite entre dois dias não é uma exceção.
Aqui, estendi o exemplo da documentação da Apple para evitar nil
datas.
- (NSInteger)midnightsBetweenFromDate:(NSDate *)startDate
toDate:(NSDate *)endDate
{
if (startDate == nil || endDate == nil)
return NSNotFound;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSInteger startDay = [calendar ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSEraCalendarUnit
forDate:startDate];
NSInteger endDay = [calendar ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSEraCalendarUnit
forDate:endDate];
[calendar release];
if (startDay == NSNotFound)
return startDay;
if (endDay == NSNotFound)
return endDay;
return endDay - startDay;
}